Lista de valores inteiros primitivos em Java
1. Visão geral
Neste tutorial,we’ll learn how to construct a list containing primitive integer values.
Exploraremos soluções usando Java principal e bibliotecas externas.
2. Autoboxing
Em Java, os argumentosgeneric type devem ser tipos de referência. This means we can’t do something like List<int>.
Em vez disso, podemos usarList<Integer>e tirar vantagem do autoboxing. Autoboxing nos ajuda a usar a interfaceList<Integer> como se ela contivesse valoresint primitivos. Por baixo do capô, ainda é uma coleção deObjectse não primitivos.
A solução Java principal é apenas um ajuste para poder usar primitivas comcollections genérico. Além disso,it comes with the cost of boxing and unboxing conversions.
No entanto, existem outras opções em Java e bibliotecas de terceiros adicionais que podemos usar. Vamos ver como usá-los abaixo.
3. Usando a API de Stream
Oftentimes, we don’t actually need to create a list tanto quanto precisamos apenas para operar nele.
Nestes casos, pode funcionar usar Java 8Stream API em vez de criar uma lista completa. The IntSream class provides a sequence of primitive int elements that supports sequential aggregate operations.
Vamos dar uma rápida olhada em um exemplo:
IntStream stream = IntStream.of(5, 10, 0, 2, -8);
O métodoIntStream.of()static retorna umIntStream sequencial.
Da mesma forma, podemos criar umIntStream a partir de uma matriz existente deints:
int[] primitives = {5, 10, 0, 2, -8};
IntStream stream = IntStream.of(primitives);
Além disso, podemos aplicar as operações padrão do Stream API para iterar, filtrar e agregarints. Por exemplo, podemos calcular a média dos valores positivos deint:
OptionalDouble average = stream.filter(i -> i > 0).average();
Mais importante ainda,no autoboxing is used ao trabalhar com os fluxos.
Porém, se definitivamente precisamos de uma lista concreta, vamos dar uma olhada em uma das seguintes bibliotecas de terceiros.
4. Usando Trove
Trove is a high-performance library which provides primitive collections for Java.
Para configurar o Trove com Maven, precisamos incluirthe trov4j dependency em nossopom.xml:
net.sf.trove4j
trove4j
3.0.2
Com Trove,we can create lists, maps, and sets.
Por exemplo, existe uma interfaceTIntList com sua implementaçãoTIntArrayList para trabalhar com uma lista de valoresint:
TIntList tList = new TIntArrayList();
Mesmo queTIntList não possa implementar diretamenteList, seus métodos são muito comparáveis. Outras soluções que discutimos seguem um padrão semelhante.
The greatest benefit of using TIntArrayList is performance and memory consumption gains. Nenhum boxing / unboxing adicional é necessário, pois ele armazena os dados dentro de uma matrizint[].
5. Usando Fastutil
Outra biblioteca de alto desempenho para trabalhar com os primitivos éFastutil. Vamos adicionar ofastutil dependency:
it.unimi.dsi
fastutil
8.1.0
Agora, estamos prontos para usá-lo:
IntArrayList list = new IntArrayList();
The default constructor IntArrayList() internally creates an array of primitives with the default capacity of 16. Na mesma linha, podemos inicializá-lo a partir de uma matriz existente:
int[] primitives = new int[] {5, 10, 0, 2, -8};
IntArrayList list = new IntArrayList(primitives);
6. Usando Colt
Colt is an open source, a high-performance library for scientific and technical computing. O pacotecern.colt contém listas redimensionáveis contendo tipos de dados primitivos, comoint.
Primeiro, vamos adicionar ocolt dependency:
colt
colt
1.2.0
A lista primitiva que oferece esta biblioteca écern.colt.list.IntArrayList:
cern.colt.list.IntArrayList coltList = new cern.colt.list.IntArrayList();
A capacidade inicial padrão é dez.
7. Usando goiaba
Guava provides a number of ways of interfacing between primitive arrays and collection APIs. O pacotecom.google.common.primitives possui todas as classes para acomodar tipos primitivos.
Por exemplo, a classeImmutableIntArray nos permite criar uma lista imutável de elementosint.
Vamos supor que temos a seguinte matriz de valoresint:
int[] primitives = new int[] {5, 10, 0, 2};
Podemos simplesmente criar uma lista com a matriz:
ImmutableIntArray list = ImmutableIntArray.builder().addAll(primitives).build();
Além disso, fornece uma API de lista com todos os métodos padrão que esperamos.
8. Conclusão
Neste artigo rápido,we showed multiple ways of creating lists with the primitive integers. In our examples, we used the Trove, Fastutil, Colt, and Guava libraries.
Como de costume, o código completo deste artigo está disponívelover on GitHub.