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?
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
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.
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);
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 -
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.
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.
Sammlungen verwenden Generika, die entweder Referenztypen oder Wilcards unterstützen. Sie können jedoch einen Integer
-Wrapper verwenden
List<Integer> list = new ArrayList<>();
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.
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
Außerdem finden Sie in meinem letzten Artikel in Baeldung eine gute Zusammenfassung der Liste der primitiven Ganzzahlwerte in Java .