Existe uma maneira de criar uma lista de int primitivos ou quaisquer primitivos em java como a seguir?
List<int> myList = new ArrayList<int>();
Parece que posso fazer List myList = new ArrayList();
e adicione "int" a esta lista. Mas isso significaria que posso adicionar qualquer coisa a esta lista.
É minha única opção, criar um array de int e convertê-lo em uma lista ou criar uma lista de objetos Integer?
java
list
generics
collections
Susie
fonte
fonte
Respostas:
Em Java, o tipo de qualquer variável é um tipo primitivo ou um tipo de referência. Os argumentos de tipo genérico devem ser tipos de referência. Como os primitivos não se estendem,
Object
eles não podem ser usados como argumentos de tipo genérico para um tipo parametrizado.Em vez disso, use a
Integer
classe que é um wrapper paraint
:Se estiver usando o Java 7, você pode simplificar esta declaração usando o operador diamante:
Com autoboxing em Java, o tipo primitivo
int
se tornará umInteger
quando necessário.Portanto, o seguinte é válido:
fonte
Não, não há nenhuma coleção que possa conter tipos primitivos quando o Java Collection Framework está sendo usado.
No entanto, existem outras coleções java que suportam tipos primitivos, como: Trove , Colt , Fastutil , Guava
Um exemplo de como um arraylist com ints seria quando a Trove Library fosse usada é o seguinte:
O desempenho dessa lista, quando comparada com a ArrayList de inteiros de coleções Java, é muito melhor, pois o autoboxing / unboxing para a classe de invólucro inteiro correspondente não é necessário.
fonte
Não, você não pode. Você só pode criar lista de tipos de referência, como
Integer
,String
ou seu tipo personalizado.Quando você adiciona
int
a esta lista, é automaticamente encaixotado para oInteger
tipo de invólucro. Mas é uma má ideia usar listas de tipo bruto , ou para qualquer tipo genérico nesse caso, em código mais recente.Claro, essa é a desvantagem de usar o tipo bruto. Você pode ter gato , cachorro , tigre , dinossauro , tudo em um recipiente.
Nesse caso também, você receberá
List<Integer>
apenas um . Não há como você criarList<int>
ou quaisquer primitivos.Você não deve ser incomodado de qualquer maneira. Mesmo em
List<Integer>
você pode adicionarint
tipos primitivos. Será encaixotado automaticamente, conforme o exemplo abaixo:fonte
Tente usar o ArrayIntList da estrutura do apache. Ele funciona exatamente como um arraylist, exceto que pode conter um int primitivo.
Mais detalhes aqui -
https://commons.apache.org/dormant/commons-primitives/apidocs/org/apache/commons/collections/primitives/ArrayIntList.html
fonte
Isso não é possível. A especificação java proíbe o uso de primitivos em genéricos. No entanto, você pode criar
ArrayList<Integer>
e chamaradd(i)
sei
for um int graças ao boxe.fonte
Você pode usar coleções primitivas disponíveis em Eclipse Collections . Eclipse Colecções tem
List
,Set
,Bag
eMap
para todos os primitivos. Os elementos nas coleções primitivas são mantidos como primitivos e nenhum boxing ocorre.Você pode inicializar um IntList assim:
Você pode converter de a
List<Integer>
paraIntList
assim:Nota: Sou um contribuidor das Coleções Eclipse.
fonte
As coleções usam genéricos que suportam tipos de referência ou wilcards. No entanto, você pode usar um
Integer
invólucrofonte
Quando você usa Java para desenvolvimento Android, é recomendado usar
SparseIntArray
para evitar autoboxing entreint
eInteger
.Você pode encontrar mais informações
SparseIntArray
na documentação do Android Developers e uma boa explicação para autoboxing no Android. Insira a descrição do link aquifonte
SparseIntArray
é freqüentemente uma opção melhor, mas há vantagens e desvantagens a serem observadas. "A implementação não se destina a ser apropriada para estruturas de dados que podem conter um grande número de itens. Geralmente é mais lento do que um HashMap tradicional ..."Essa omissão grosseira das bibliotecas principais do Java parece ocorrer em quase todos os projetos em que já trabalho. E por mais conveniente que a biblioteca Trove possa ser, não consigo analisar os requisitos precisos para atender ao LPGL para um aplicativo Android que vincula estaticamente uma biblioteca LGPL (o preâmbulo diz ok, o corpo não parece dizer o mesmo). E é simplesmente inconveniente extrair e remover fontes do Apache para obter essas classes. Tem que haver uma maneira melhor.
fonte
A coleção Java deve ser apenas coleções de objetos.
Integer é uma classe de wrapper do tipo de dados primitivo int.
mais das classes de wrapper JAVA aqui !
Você pode salvar e obter int de / para integerList diretamente como,
integerList.add(intValue);
int intValue = integerList.get(i)
fonte