wake-up-neo.com

Erstellen Sie eine Liste der primitiven Int.

Gibt es eine Möglichkeit, eine Liste der primitiven int oder einer der folgenden primitiven Elemente in Java zu erstellen? 

List<int> myList = new ArrayList<int>();

Es scheint, ich kann List myList = new ArrayList();

und fügen Sie "int" in diese Liste ein. Aber dann würde ich etwas in diese Liste aufnehmen können. 

Ist meine einzige Option, ein Array von int zu erstellen und in eine Liste zu konvertieren oder eine Liste mit Integer-Objekten zu erstellen? 

67
Susie

In Java ist der Typ einer Variablen entweder ein Primitivtyp oder ein Referenztyp. Generische Typargumente müssen Referenztypen sein. Da Primitive nicht Object erweitern, können sie nicht als generische Typargumente für einen parametrisierten Typ verwendet werden.

Verwenden Sie stattdessen die Integer-Klasse, die ein Wrapper für int ist:

List<Integer> list = new ArrayList<Integer>();

Wenn Sie Java 7 verwenden, können Sie diese Deklaration mit dem Diamantoperator vereinfachen:

List<Integer> list = new ArrayList<>();

Beim Autoboxing in Java wird der primitive Typ int bei Bedarf zu einer Integer

Autoboxing ist die automatische Konvertierung, die der Java-Compiler vornimmt zwischen den primitiven Typen und dem entsprechenden Objektwrapper Klassen.

Also gilt Folgendes:

int myInt = 1;
List<Integer> list = new ArrayList<Integer>();
list.add(myInt);

System.out.println(list.get(0)); //prints 1
107
Kevin Bowersox

Nein, es gibt keine Sammlung, die primitive Typen enthalten kann, wenn Java Collection Framework verwendet wird.

Es gibt jedoch auch andere Java-Sammlungen, die primitive Typen unterstützen, z. B.: Trove , Colt , Fastutil , Guava

Ein Beispiel, wie eine Arrayliste mit Ints aussehen würde, wenn die Trove Library verwendet wird, ist folgendes:

 TIntArrayList list= new TIntArrayList();

Die Leistung dieser Liste ist im Vergleich mit der ArrayList von Integers aus Java Collections viel besser, da das Autoboxing/Unboxing für die entsprechende Integer-Wrapper-Klasse nicht erforderlich ist.

23
Mike B

Gibt es eine Möglichkeit, eine Liste der primitiven int oder aller primitiven Elemente in Java zu erstellen

Nein, das kannst du nicht. Sie können nur eine Liste von Referenztypen erstellen, wie Integer, String oder Ihren benutzerdefinierten Typ.

Es scheint, dass ich List myList = new ArrayList(); tun und "int" in diese Liste aufnehmen kann.

Wenn Sie dieser Liste int hinzufügen, wird diese automatisch mit dem Wrapper-Typ Integer versehen. Es ist jedoch keine gute Idee, raw type-Listen oder für jeden generischen Typ in neuerem Code zu verwenden.

Ich kann alles in diese Liste aufnehmen. 

Das ist natürlich der Nachteil der Verwendung des Rohtyps. Sie können Katze , Hund , Tiger , Dinosaurier , alle in einem Behälter haben.

Ist meine einzige Möglichkeit, ein Array von int zu erstellen und es in eine Liste zu konvertieren

In diesem Fall erhalten Sie nur einen List<Integer>. Es gibt keine Möglichkeit, List<int> oder Grundelemente zu erstellen.

Sie sollten sowieso nicht gestört werden. Selbst in List<Integer> können Sie einen primitiven Typ int hinzufügen. Es wird wie in dem folgenden Beispiel automatisch umrahmt:

List<Integer> list = new ArrayList<Integer>();
list.add(5);
9
Rohit Jain

Versuchen Sie es mit der ArrayIntList aus dem Apache-Framework. Es funktioniert genau wie eine Arrayliste, außer dass es primitive int enthalten kann. 

Weitere Details hier -

https://commons.Apache.org/dormant/commons-primitives/apidocs/org/Apache/commons/collections/primitives/ArrayIntList.html

6
stolen_leaves

Das ist nicht möglich. Die Java-Spezifikation verbietet die Verwendung von Grundelementen in Generics. Sie können jedoch ArrayList<Integer> erstellen und add(i) aufrufen, wenn i dank Boxing ein int ist.

5
Andrey Akhmetov

Sie können primitive Sammlungen in Eclipse Collections verwenden. Eclipse Collections hat List, Set, Bag und Map für alle Grundelemente. Die Elemente in den primitiven Sammlungen werden als primitive Elemente verwaltet und es findet kein Boxen statt.

Sie können eine IntList wie folgt initialisieren:

MutableIntList ints = IntLists.mutable.empty();

Sie können von einem List<Integer> zu IntList folgendermaßen konvertieren:

List<Integer> integers = new ArrayList<>();
MutableIntList ints = ListAdapter.adapt(integers).collectInt(each -> each);

Hinweis: Ich arbeite an Eclipse-Sammlungen mit.

4

Sammlungen verwenden Generika, die entweder Referenztypen oder Wilcards unterstützen. Sie können jedoch einen Integer-Wrapper verwenden

List<Integer> list = new ArrayList<>();
2
Reimeus

Gibt es eine Möglichkeit, ein Integer [] - Array in ein int [] - Array zu konvertieren?

Diese grobe Auslassung aus den Java-Kernbibliotheken scheint bei fast jedem Projekt, an dem ich jemals arbeite, aufzutreten. Und so praktisch die Trove-Bibliothek auch sein mag, ich kann die genauen Anforderungen für eine Android-App, die eine LGPL-Bibliothek statisch verknüpft (LPG), die genauen Voraussetzungen erfüllen, um LPGL zu erfüllen. Und es ist einfach unpraktisch, Apache-Quellen zu reißen, um diese Klassen zu erhalten. Es muss einen besseren Weg geben.

0
Robin Davies

Wenn Sie Java für die Android-Entwicklung verwenden, wird empfohlen, SparseIntArray zu verwenden, um das Autoboxing zwischen int und Integer zu verhindern.

Weitere Informationen zu SparseIntArray finden Sie in der Dokumentation für Android-Entwickler und eine gute Erklärung für Autoboxing auf Android Geben Sie die Linkbeschreibung hier ein

0
Stefan Medack

Außerdem finden Sie in meinem letzten Artikel in Baeldung eine gute Zusammenfassung der Liste der primitiven Ganzzahlwerte in Java

0
mherBaghinyan