31 votes

Créer un tableau avec n copies de la même valeur/objet ?

Je veux créer un tableau de taille n avec la même valeur à chaque indice du tableau. Quelle est la meilleure façon de faire cela en Java ?

Par exemple, si n est 5 et la valeur est le booléen false le tableau devrait être :

= [false, false, false, false, false]

36voto

user191591 Points 43
List<Integer> copies = Collections.nCopies(copiesCount, value);

javadoc ici .

Cette solution est meilleure que la solution "Arrays.fill" pour plusieurs raisons :

  1. c'est agréable et lisse,
  2. il consomme moins de mémoire (voir code source ), ce qui est important pour une quantité importante de copies ou d'objets à copier,
  3. il crée une liste immuable,
  4. il peut créer une liste de copies d'un objet de type non primitif. Il faut cependant l'utiliser avec prudence car l'élément lui-même ne sera pas dupliqué et la méthode get() renverra la même valeur pour chaque index. Il est préférable de fournir un objet immuable pour la copie ou de s'assurer qu'il ne sera pas modifié.

Et les listes sont plus cool que les tableaux :) Mais si vous voulez vraiment, vraiment, vraiment un tableau - alors vous pouvez faire ce qui suit :

Integer[] copies = Collections.nCopies(copiesCount, value)
                              .toArray(new Integer[copiesCount]);

34voto

hsz Points 46509

Vous pouvez l'essayer avec :

boolean[] array = new boolean[5];
Arrays.fill(array, false);

Deuxième méthode avec remplissage manuel du tableau :

boolean[] array = new boolean[] {false, false, false, false, false};

6voto

Brian Agnew Points 143181

Arrays.fill() remplira un tableau existant avec la même valeur. Des variantes existent pour les primitives et les Objects .

6voto

assylias Points 102015

Pour cet exemple précis, rien, une boolean[] sera initialisé à [false, false, ...] par défaut.

Si vous souhaitez initialiser votre tableau avec des valeurs autres que celles par défaut, vous devrez boucler ou utiliser la fonction Arrays.fill qui fait la boucle pour vous.

3voto

Kent Points 71470

Arrays.fill(...) est ce que vous recherchez.

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