Vector Java o ArrayList per Primitivi
-
18-09-2019 - |
Domanda
C'è una classe espandibile array in Java API equivalente alla Vector
o classe di ArrayList
che può essere utilizzato con le primitive (int, char, doppie, ecc)?
Ho bisogno di un rapido, un array espandibile per gli interi e sembra uno spreco avere avvolgerli nella classe Integer
al fine di utilizzarli con Vector
o ArrayList
. Il mio google-fu mi sta venendo a mancare.
Soluzione
Non v'è, purtroppo, no tale classe , almeno nel API Java. C'è il primitivi Collezioni per Java prodotto di terze parti.
E 'piuttosto pericoloso usare auto-boxing insieme con le classi di raccolta esistenti (in particolare le implementazioni List
). Ad esempio:
List<Integer> l = new ArrayList<Integer>();
l.add(4);
l.remove(4); //will throw ArrayIndexOutOfBoundsException
l.remove(new Integer(4)); //what you probably intended!
Ed è anche una fonte comune di NullPointerExceptions
misteriosa accesso (magari tramite un Map
):
Map<String, Integer> m = new HashMap<String, Integer>();
m.put("Hello", 5);
int i = m.get("Helo Misspelt"); //will throw a NullPointerException
Altri suggerimenti
http://trove4j.sourceforge.net/
La libreria Trove fornisce l'alta velocità collezioni regolari e primitive per Java.
Si noti che a causa Trove utilizza primitive, i tipi definisce non implementare le interfacce collezioni java.util.
(licenza LGPL)
Moderno Java supporta autoboxing di primitive, in modo da poter dire
List<Integer> lst = new ArrayList<Integer>;
lst.add(42);
Questo almeno evita l'aceto sintattica di new Integer (42).
C'è anche Collezioni Primitive per Java ma è un po 'fuori moda.
Eclipse Collezioni ha ArrayLists primitive per tutti i tipi primitivi, così come insiemi primitivi, Borse, Stacks e mappe. Ci sono versioni immutabili di tutti i tipi di contenitori primitivi pure.
. Nota: Sono un committer per Eclipse Collezioni