Vector de Java o ArrayList para Primitives
-
18-09-2019 - |
Pregunta
¿Hay una clase ampliable matriz en la API de Java equivalente a la Vector
o una clase de ArrayList
que se puede utilizar con los primitivos (int, char, dobles, etc.)?
Necesito un arreglo rápido, ampliable para los enteros y parece un desperdicio tener que envolverlos en la clase Integer
con el fin de utilizarlos con Vector
o ArrayList
. Mi google-fu me está fallando.
Solución
No es por desgracia hay tal clase , al menos en la API de Java. Existe la primitivas colecciones para el producto 3 ª parte de Java .
Es muy peligroso utilizar auto-boxing, junto con clases de colecciones existentes (en particular, las implementaciones List
). Por ejemplo:
List<Integer> l = new ArrayList<Integer>();
l.add(4);
l.remove(4); //will throw ArrayIndexOutOfBoundsException
l.remove(new Integer(4)); //what you probably intended!
Y también es una fuente común de acceso a NullPointerExceptions
misteriosa (tal vez a través de un Map
):
Map<String, Integer> m = new HashMap<String, Integer>();
m.put("Hello", 5);
int i = m.get("Helo Misspelt"); //will throw a NullPointerException
Otros consejos
http://trove4j.sourceforge.net/
La biblioteca Trove proporciona alta velocidad colecciones regulares y primitivas para Java.
Tenga en cuenta que debido a Trove utiliza primitivas, los tipos se define no implementan las interfaces colecciones java.util.
(LGPL)
Moderno Java soporta autoboxing de primitivas, por lo que puede decir
List<Integer> lst = new ArrayList<Integer>;
lst.add(42);
Eso al menos evita el vinagre sintáctica de nuevo entero (42).
También hay primitivas colecciones de Java pero es un poco fuera de fecha.
Eclipse Colecciones tiene ArrayLists primitivas para todos los tipos primitivos, así como los conjuntos primitivos, bolsas, Pilas y mapas. Hay versiones inmutables de todos los tipos de contenedores primitivas también.
Nota:. Soy un confirmador de Eclipse Colecciones