Gibt es eine Möglichkeit, eine Liste von primitiven int oder Primitiven in Java wie folgt zu erstellen?
List<int> myList = new ArrayList<int>();
Es scheint, ich kann es tun List myList = new ArrayList();
und fügen Sie "int" in diese Liste ein. Aber dann würde das bedeuten, dass ich alles in diese Liste aufnehmen kann.
Ist meine einzige Option, ein Array von int zu erstellen und es in eine Liste zu konvertieren oder eine Liste von Integer-Objekten zu erstellen?
java
list
generics
collections
Susie
quelle
quelle
Antworten:
In Java ist der Typ einer Variablen entweder ein primitiver Typ oder ein Referenztyp. Generische Typargumente müssen Referenztypen sein. Da Grundelemente nicht erweitert werden
Object
, können sie nicht als generische Typargumente für einen parametrisierten Typ verwendet werden.Verwenden Sie stattdessen die
Integer
Klasse, die ein Wrapper ist fürint
:Wenn Sie Java 7 verwenden, können Sie diese Deklaration mit dem Diamantoperator vereinfachen:
Mit Autoboxing in Java wird der primitive Typ bei Bedarf
int
zu einemInteger
.Folgendes gilt also:
quelle
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 dafür, wie eine Arrayliste mit Ints bei Verwendung der Trove Library aussehen würde, ist das Folgende:
Die Leistung dieser Liste ist im Vergleich zur ArrayList of Integers aus Java Collections viel besser, da das Autoboxing / Unboxing für die entsprechende Integer Wrapper-Klasse nicht erforderlich ist.
quelle
Nein, kannst du nicht. Sie können nur Liste der Referenztypen erstellen, wie
Integer
,String
oder Ihre benutzerdefinierten Typ.Wenn Sie
int
dieser Liste hinzufügen , wird sie automatisch demInteger
Wrapper-Typ zugeordnet. Aber es ist eine schlechte Idee zu verwenden rohe Typ - Listen oder für jede generische Art für diese Angelegenheit, in neuerem Code.Dies ist natürlich der Nachteil der Verwendung von Rohtyp. Sie können Katze , Hund , Tiger , Dinosaurier in einem Behälter haben.
Auch in diesem Fall erhalten Sie
List<Integer>
nur eine. Es gibt keine Möglichkeit,List<int>
Primitive zu erstellen .Sie sollten sowieso nicht gestört werden. Auch in
List<Integer>
können Sie einenint
primitiven Typ hinzufügen . Es wird automatisch verpackt, wie im folgenden Beispiel:quelle
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
quelle
Das ist nicht möglich. Die Java-Spezifikation verbietet die Verwendung von Grundelementen in Generika. Sie können jedoch dank des Boxens erstellen
ArrayList<Integer>
und aufrufen,add(i)
obi
es sich um ein Int handelt.quelle
Sie können primitive Sammlungen verwenden, die in Eclipse- Sammlungen verfügbar sind . Eclipse - Kollektionen haben
List
,Set
,Bag
undMap
für alle Primitiven. Die Elemente in den primitiven Sammlungen werden als primitive Elemente beibehalten, und es findet kein Boxen statt.Sie können eine IntList wie folgt initialisieren :
Sie können von a
List<Integer>
inIntList
wie folgt konvertieren :Hinweis: Ich bin ein Mitarbeiter von Eclipse Collections.
quelle
Sammlungen verwenden Generika, die entweder Referenztypen oder Wilcards unterstützen. Sie können jedoch einen
Integer
Wrapper verwendenquelle
Wenn Sie Java für die Android-Entwicklung verwenden, wird empfohlen, diese zu verwenden
SparseIntArray
, um Autoboxen zwischenint
und zu verhindernInteger
.Weitere Informationen finden Sie
SparseIntArray
in der Dokumentation der Android-Entwickler. Eine gute Erklärung für das Autoboxen unter Android finden Sie hierquelle
SparseIntArray
ist häufig eine bessere Option, aber es gibt Kompromisse zu beachten. "Die Implementierung ist nicht für Datenstrukturen geeignet, die eine große Anzahl von Elementen enthalten können. Sie ist im Allgemeinen langsamer als eine herkömmliche HashMap ..."Diese grobe Auslassung aus den Java-Kernbibliotheken scheint bei so ziemlich jedem Projekt aufzutreten, an dem ich jemals gearbeitet habe. Und so praktisch die Trove-Bibliothek auch sein mag, ich kann die genauen Anforderungen für die Erfüllung von LPGL für eine Android-App, die eine LGPL-Bibliothek statisch verknüpft, nicht analysieren (Präambel sagt ok, body scheint nicht dasselbe zu sagen). Und es ist einfach unpraktisch, Apache-Quellen zu entfernen, um diese Klassen zu erhalten. Es muss einen besseren Weg geben.
quelle
Die Java-Sammlung sollte nur eine Sammlung von Objekten sein.
Ganzzahl ist die Wrapper-Klasse des primitiven Datentyps int.
mehr von JAVA Wrapper Klassen hier !
Sie können direkt speichern und int zu / von integerList erhalten als,
integerList.add(intValue);
int intValue = integerList.get(i)
quelle