204 votes

Comment puis-je initialiser une ArrayList avec tous les zéros en Java?

Il semble que arraylist ne fait pas son travail pour presizing:

 // presizing 

ArrayList<Integer>() list = new ArrayList<Integer>(60);
 

Ensuite, lorsque j'essaie d'y accéder:

 list.get(5) 
 

Il affiche null au lieu de 0. Existe-t-il un moyen d'initialiser tous les éléments à 0 d'une taille exacte comme le fait le C ++?

506voto

aioobe Points 158466

L'entier transmis au constructeur représente sa capacité initiale , c'est-à-dire le nombre d'éléments qu'il peut contenir avant de devoir redimensionner son tableau interne (et n'a rien à voir avec le nombre initial d'éléments de la liste).

Pour initialiser un ArrayList avec 60 zéros, vous faites:

 ArrayList<Integer> list = new ArrayList<Integer>(Collections.nCopies(60, 0));
 

13voto

corsiKa Points 39442
// 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<Integer> list = Arrays.asList(data);

7voto

WhiteFang34 Points 28652

Les 60 que vous passez ne représentent que la capacité initiale de stockage interne. C'est un indice sur la taille que vous pensez que cela pourrait être, mais bien sûr, il n'est pas limité par cela. Si vous devez prédéfinir des valeurs, vous devrez les définir vous-même, par exemple:

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

0voto

Marcin Points 960

Ce n'est pas comme ça. ArrayList utilise simplement un tableau comme mémoire interne. Si vous ajoutez plus de 60 éléments, le tableau sous-jacent sera remplacé. Cependant, vous pouvez ajouter autant d’éléments à ce tableau que de mémoire vive.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X