Java Vector ou ArrayList para Primitives
-
18-09-2019 - |
Pergunta
Existe uma classe de conjunto expansível na API Java equivalente ao Vector
ou classe ArrayList
que pode ser usado com primitivos (int, char, duplos, etc)?
Eu preciso de uma série rápida, expansível para inteiros e parece um desperdício ter que envolvê-los na classe Integer
, a fim de usá-los com Vector
ou ArrayList
. Meu google-fu está falhando comigo.
Solução
Não é, infelizmente, nenhuma classe , pelo menos no API Java. Há os primitivos coleções para o produto 3-parte Java .
É muito perigoso usar auto-boxing em conjunto com classes de coleção existentes (em particular implementações List
). Por exemplo:
List<Integer> l = new ArrayList<Integer>();
l.add(4);
l.remove(4); //will throw ArrayIndexOutOfBoundsException
l.remove(new Integer(4)); //what you probably intended!
E também é uma fonte comum de acessar NullPointerExceptions
misteriosa (talvez através de um Map
):
Map<String, Integer> m = new HashMap<String, Integer>();
m.put("Hello", 5);
int i = m.get("Helo Misspelt"); //will throw a NullPointerException
Outras dicas
http://trove4j.sourceforge.net/
A biblioteca Trove oferece alta velocidade coleções regulares e primitivas para Java.
Note que, porque Trove usa primitivos, os tipos Ela define não implementar as interfaces coleções java.Util.
(licença LGPL)
suporte Java Modern autoboxing de primitivas, assim você pode dizer
List<Integer> lst = new ArrayList<Integer>;
lst.add(42);
Isso, pelo menos, evita o vinagre sintática de new Integer (42).
Há também primitivos coleções de Java mas é um pouco fora da data.
Eclipse Coleções tem ArrayLists primitivos para todos os tipos primitivos, bem como conjuntos de primitivas, sacos, Stacks e mapas. Existem versões imutáveis ??de todos os tipos de contêineres primitivos também.
Nota:. Eu sou um committer para Eclipse coleções