Como posso inicializar um ArrayList com todos os zeros em Java?

Parece que arraylist não está fazendo seu trabalho para presizing:

 // presizing ArrayList() list = new ArrayList(60); 

Depois, quando tento acessá-lo:

 list.get(5) 

Ele mostra null em vez de 0. Existe uma maneira de inicializar todos os elementos para 0 de um tamanho exato como o que o C ++ faz?

O inteiro passado ao construtor representa sua capacidade inicial , isto é, o número de elementos que ele pode conter antes de precisar resize sua matriz interna (e não tem nada a ver com o número inicial de elementos na lista).

Para inicializar uma lista com 60 zeros, você faz:

 List list = new ArrayList(Collections.nCopies(60, 0)); 

Se você quiser criar uma lista com 60 objects diferentes , poderá usar a API de stream com um Supplier seguinte maneira:

 List persons = Stream.generate(Person::new) .limit(60) .collect(Collectors.toList()); 
 // apparently this is broken. Whoops for me! java.util.Collections.fill(list,new Integer(0)); // this is better Integer[] data = new Integer[60]; Arrays.fill(data,new Integer(0)); List list = Arrays.asList(data); 

Os 60 que você está passando são apenas a capacidade inicial de armazenamento interno. É uma dica sobre o quão grande você acha que pode ser, mas é claro que não é limitado por isso. Se você precisar pré-configurar os valores, terá que configurá-los, por exemplo:

 for (int i = 0; i < 60; i++) { list.add(0); } 

Implementação do Java 8 (lista inicializada com 60 zeros) :

 List list = IntStream.of(new int[60]) .boxed() .collect(Collectors.toList()); 
  • new int[N] – cria um array preenchido com zeros e comprimento N
  • boxed() – cada elemento em checkbox para um inteiro
  • collect(Collectors.toList()) – coleta elementos do stream

Não é desse jeito. ArrayList apenas usa array como ressonância interna. Se você adicionar mais de 60 elementos, a matriz subjacente será expandida. Como sempre você pode adicionar tantos elementos a esta matriz quanto mais RAM você tiver.