Inicializando matrizes em Java

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.