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.

Foi útil?

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).

Joda-Primitives .

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top