Inicializando matrizes em Java
1. Visão geral
Neste tutorial rápido, veremos as diferentes maneiras em que podemos inicializar um array e as diferenças sutis entre eles.
2. Um elemento de cada vez
Vamos começar com um método simples baseado em loop:
for (int i = 0; i < array.length; i++) {
array[i] = i + 2;
}
E vamos também ver como podemos inicializar um array multidimensional, um elemento de cada vez:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 5; j++) {
array[i][j] = j + 1;
}
}
3. No momento da declaração
Vamos agora inicializar uma matriz no momento da declaração:
String array[] = new String[] {
"Toyota", "Mercedes", "BMW", "Volkswagen", "Skoda" };
Ao instanciar a matriz, não precisamos especificar seu tipo:
int array[] = { 1, 2, 3, 4, 5 };
Observe que não é possível inicializar uma matriz após a declaração usando esta abordagem. Uma tentativa de fazer isso resultará em um erro de compilação.
4. UsandoArrays.fill()
A classejava.util.Arrays tem vários métodos chamadosfill() que aceitam diferentes tipos de argumentos e preenchem todo o array com o mesmo valor:
long array[] = new long[5];
Arrays.fill(array, 30);
O método também possui várias alternativas que definem um intervalo de uma matriz para um valor específico:
int array[] = new int[5];
Arrays.fill(array, 0, 3, -50);
Observe que o método aceita a matriz, o índice do primeiro elemento, o número de elementos e o valor.
5. UsandoArrays.copyOf()
O métodoArrays.copyOf() cria um novo array copiando outro array. O método possui muitas sobrecargas que aceitam diferentes tipos de argumentos.
Vamos ver um exemplo rápido:
int array[] = { 1, 2, 3, 4, 5 };
int[] copy = Arrays.copyOf(array, 5);
Algumas notas aqui:
-
O método aceita a matriz de origem e o comprimento da cópia a ser criada
-
Se o comprimento for maior que o comprimento da matriz a ser copiada, os elementos extras serão inicializados usando seus valores padrão
-
Se a matriz de origem não foi inicializada, umNullPointerException é lançado
-
Se o comprimento da matriz de origem for negativo, umNegativeArraySizeException é lançado
6. UsandoArrays.setAll()
O métodoArrays.setAll() define todos os elementos de uma matriz usando uma função geradora:
int[] array = new int[20];
Arrays.setAll(array, p -> p > 9 ? 0 : p);
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Se a função do gerador for nula, umNullPointerException é lançado.
7. UsandoArrayUtils.clone()
Por fim, vamos utilizar a APIArrayUtils.clone() do Apache Commons Lang 3 - que inicializa um array criando uma cópia direta de outro array:
char[] array = new char[] {'a', 'b', 'c'};
char[] copy = ArrayUtils.clone(array);
Observe que esse método está sobrecarregado para todos os tipos primitivos.
8. Conclusão
Neste artigo, exploramos diferentes maneiras de inicializar matrizes em Java.
Como sempre, a versão completa do código está disponívelover on GitHub.