Java Vector oder Arraylist für Primitives
-
18-09-2019 - |
Frage
Gibt es ein expandierbares Array-Klasse in der Java-API entspricht dem Vector
oder ArrayList
Klasse, die mit Primitiven verwendet werden kann (int, char, double, usw.)?
Ich brauche einen schnellen, erweiterbaren Array für ganze Zahlen, und es scheint verschwenderisch haben sie in der Integer
Klasse zu wickeln, um sie mit Vector
oder ArrayList
zu verwenden. Mein Google-Fu versagt mir.
Lösung
Es ist leider keine solche Klassen , zumindest in dem Java-API. Es gibt die 3rd-Party-Produkt rel="noreferrer">.
Es ist ziemlich gefährlich Auto-Boxen zusammen mit bestehenden Sammelklassen (insbesondere List
Implementierungen) zu verwenden. Zum Beispiel:
List<Integer> l = new ArrayList<Integer>();
l.add(4);
l.remove(4); //will throw ArrayIndexOutOfBoundsException
l.remove(new Integer(4)); //what you probably intended!
Und es ist auch eine häufige Quelle von mysteriösem NullPointerExceptions
Zugriff (vielleicht über einen Map
):
Map<String, Integer> m = new HashMap<String, Integer>();
m.put("Hello", 5);
int i = m.get("Helo Misspelt"); //will throw a NullPointerException
Andere Tipps
http://trove4j.sourceforge.net/
Die Trove Bibliothek bietet eine hohe Geschwindigkeit regelmäßige und primitive Sammlungen für Java.
Beachten Sie, dass, weil Trove Primitiven verwendet, definiert die Typen es tun, um die java.util Sammlungen Schnittstellen nicht implementiert.
(LGPL)
Modernes Java unterstützt Autoboxing von Primitiven, so kann man sagen,
List<Integer> lst = new ArrayList<Integer>;
lst.add(42);
Das ist zumindest die syntaktische Essig neuer Integer vermeidet (42).
Es gibt auch Primitive Kollektionen von Java aber es ist ein bisschen veraltet.
Eclipse-Sammlungen primitive Arraylisten für alle primitiven Typen hat, sowie primitive Sets, Taschen, Stacks und maps. Es gibt unveränderliche Versionen aller primitiven Containertypen auch.
. Hinweis: Ich bin ein Committer für Eclipse Sammlungen