HOWTO · Java

Como inicializar todos os elementos de um array com zero em Java

Saiba quando arrays numéricos já começam com zero e como zerar um array existente em Java.

Nesta página

Um array Java recém-alocado de um tipo numérico primitivo já é inicializado com elementos iguais a zero; portanto, não é necessário fazer mais nada para obter um array novo zerado. Para zerar um array existente, use Arrays.fill() ou atribua o valor a cada elemento explicitamente. Arrays de tipos de referência, como Integer[], começam com elementos null.
A inicialização de arrays é tratada como parte do caminho de dados essenciais no Tutorial de Java.

Inicializar elementos de um array com zero usando um loop for

Um loop for atribui um valor a cada índice de um array existente. O loop começa no índice 0 e termina antes de numbers.length, percorrendo assim todos os elementos válidos.

Este programa Java completo aplica as técnicas a arrays pequenos e imprime cada resultado:

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class ArrayInitialization {
  public static void main(String[] args) {
    int[] loopValues = {4, 8, 12};
    for (int i = 0; i < loopValues.length; i++) {
      loopValues[i] = 0;
    }
    System.out.println("for loop: " + Arrays.toString(loopValues));

    int[] filledValues = {4, 8, 12};
    Arrays.fill(filledValues, 0);
    System.out.println("fill: " + Arrays.toString(filledValues));

    List<Integer> repeatedValues = Collections.nCopies(3, 0);
    Integer[] boxedValues = repeatedValues.toArray(new Integer[0]);
    System.out.println("boxed values: " + Arrays.toString(boxedValues));

    int[] numbers = {4, 8, 12};
    int[] oldReference = numbers;
    numbers = new int[numbers.length];
    System.out.println("replacement: " + Arrays.toString(numbers));
    System.out.println("old reference: " + Arrays.toString(oldReference));

    int[] generatedValues = {4, 8, 12};
    Arrays.setAll(generatedValues, index -> 0);
    System.out.println("setAll: " + Arrays.toString(generatedValues));

    int[] newValues = new int[3];
    System.out.println("new array: " + Arrays.toString(newValues));
  }
}

O programa imprime:

for loop: [0, 0, 0]
fill: [0, 0, 0]
boxed values: [0, 0, 0]
replacement: [0, 0, 0]
old reference: [4, 8, 12]
setAll: [0, 0, 0]
new array: [0, 0, 0]

Inicializar elementos de um array com zero usando o método fill() em Java

Arrays.fill() grava o valor informado em todos os elementos do array. Em um array numérico primitivo, Arrays.fill(numbers, 0) zera o array existente no próprio lugar. O método também tem versões que preenchem um intervalo selecionado, caso você queira alterar apenas parte do array.

Inicializar elementos de um array com zero usando o método nCopies()

Collections.nCopies(length, 0) retorna uma List<Integer> imutável com valores Integer repetidos (objetos empacotados). Ao converter essa lista com toArray(new Integer[0]), o resultado é um Integer[]; não é um int[] e a conversão não zera um array primitivo existente. Use essa abordagem quando o resultado desejado for uma lista ou um array de objetos Integer, e não como substituto para modificar o array original.

Inicializar elementos de um array com zero por reatribuição em Java

Atribuir new int[numbers.length] faz com que numbers passe a apontar para um novo array, cujos elementos recebem os valores padrão. Qualquer outra variável que ainda aponte para o array original continuará vendo os valores anteriores. A reatribuição troca uma referência; ela não zera o array antigo para todas as variáveis que o referenciam.

Inicializar elementos de um array com zero usando Arrays.setAll()

Arrays.setAll() chama uma função geradora baseada no índice para cada elemento e armazena o valor gerado no array. O exemplo usa index -> 0 para atribuir o mesmo valor em todos os índices. Esse método é útil quando o valor depende do índice; quando todos os elementos recebem uma única constante, Arrays.fill() é mais direto.

Conclusão

Um array numérico primitivo novo já vem inicializado com zeros. Para zerar um array existente, Arrays.fill() é uma opção direta; um loop for deixa explícita a atribuição a cada elemento, e Arrays.setAll() permite gerar valores com base no índice. Collections.nCopies() cria valores Integer repetidos em uma lista, enquanto a reatribuição faz a variável apontar para um novo array e mantém intacto o array antigo para quaisquer outras referências.