Java Vector ou ArrayList pour Primitives
-
18-09-2019 - |
Question
Y at-il une classe de tableau extensible dans l'API Java équivalente à la Vector
ou une catégorie d'ArrayList
qui peut être utilisé avec des primitives (int, char, double, etc.)?
Je besoin d'un tableau rapide, extensible pour les entiers et il semble inutile d'avoir à les envelopper dans la classe Integer
afin de les utiliser avec Vector
ou ArrayList
. Mon google-fu me manque.
La solution
Il est malheureusement pas de classe , au moins dans l'API Java. Il est Collections primitives pour le produit 3e partie Java.
Il est très dangereux d'utiliser des classes de collecte automatique de boxe avec existants (en particulier les mises en œuvre de List
). Par exemple:
List<Integer> l = new ArrayList<Integer>();
l.add(4);
l.remove(4); //will throw ArrayIndexOutOfBoundsException
l.remove(new Integer(4)); //what you probably intended!
Et il est aussi une source commune de NullPointerExceptions
mystérieuse accès (peut-être via un Map
):
Map<String, Integer> m = new HashMap<String, Integer>();
m.put("Hello", 5);
int i = m.get("Helo Misspelt"); //will throw a NullPointerException
Autres conseils
http://trove4j.sourceforge.net/
La bibliothèque Trove offre une vitesse élevée collections régulières et primitives pour Java.
Notez que parce Trove utilise des primitives, les types qu'elle définit ne reconnaissent pas la interfaces collections java.util.
(licence LGPL)
moderne Java prend en charge autoboxing de primitives, de sorte que vous pouvez dire
List<Integer> lst = new ArrayList<Integer>;
lst.add(42);
Cela évite au moins le vinaigre syntaxique de nouveau entier (42).
Il y a aussi Collections primitives Java mais il est un peu à jour.
Eclipse Collections a ArrayLists primitives pour tous les types primitifs, ainsi que des ensembles primitifs, Sacs, Stacks et des cartes. Il existe des versions immuables de tous les types de conteneurs primitifs ainsi.
Note:. Je suis un validateur pour Eclipse Collections