Comment initialiser tous les éléments d'un tableau à une valeur spécifique en java

108

Dans C/C++nous avons une memset()fonction qui peut répondre à mon souhait mais Javacomment puis-je initialiser tous les éléments à une valeur spécifique? Chaque fois que nous écrivons int[] array=new int[10];, cela initialise simplement un tableau de taille 10 ayant tous les éléments égaux à zéro. Je veux juste changer cet entier d'initialisation pour l'un de mes tableaux. c'est-à-dire que je veux initialiser un tableau qui a tous les éléments égaux à -1. Sinon, je dois mettre une forboucle juste après l'initialisation, qui va d'index 0à index size-1et à l'intérieur de cette boucle, j'attribue un élément -1. Voici le code pour plus de compréhension-

    int[] array = new int[10];
    for (int i = 0; i < size; i++) {
        array[i] = -1;
    }

Suis-je correct? Y a-t-il un autre moyen pour la même chose?

Ravi Joshi
la source

Réponses:

212

S'il s'agit d'un type primitif, vous pouvez utiliser Arrays.fill():

Arrays.fill(array, -1);

[ Soit dit memseten passant, en C ou C ++ n'est d'une réelle utilité que pour les tableaux de char. ]

Oliver Charlesworth
la source
17
J'ai vérifié le code source de Arrays.fill(). Cela fait la même chose. public static void fill(int[] a, int val) { for (int i = 0, len = a.length; i < len; i++) a[i] = val; }
Ravi Joshi
2
Oui. Comme cela devrait être. Bien que je soupçonne que le JIT pourrait être assez intelligent pour améliorer la mise en œuvre de base.
Louis Wasserman
1
Je ne suis pas d'accord. memsetpeut également être utilisé, et est en fait très utile, dans des tableaux d'entiers lorsque vous devez remplir 0ou -1, par exemple, dans des problèmes DP.
Sнаđошƒаӽ
@ Sнаđошƒаӽ - Pas de manière portable.
Oliver Charlesworth
1
Juste un FYI: vous pouvez utiliser memset_pattern4, 8 & 16 pour d'autres tailles d'entiers.
geowar
32

Il y a aussi

int[] array = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
Gilbert Le Blanc
la source
12
Que faire si la taille du tableau est inconnue?
Abhishek kumar
5

C'est également possible avec les flux Java 8:

int[] a = IntStream.generate(() -> value).limit(count).toArray();

Ce n'est probablement pas le moyen le plus efficace de faire le travail, cependant.

Alexey
la source
Cela fonctionnerait aussi pour les types non primitifs ( Stream.generate(() -> new Whatever("Hello World", 42)).limit(count).toArray();), donc est plus flexible que Arrays.fill (). Pas sûr de l'efficacité, cependant, comme vous le dites.
Christopher Riches
3

Vous pouvez le faire si c'est court:

int[] array = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};

mais cela devient mauvais pour plus que quelques-uns.

Plus facile serait une forboucle:

  int[] myArray = new int[10];
  for (int i = 0; i < array.length; i++)
       myArray[i] = -1;

Edit: J'aime aussi l' Arrays.fill()option que d'autres personnes ont mentionnée.

Danation
la source
existe-t-il une disposition pour initialiser un tableau à 2 dimensions? quelque chose comme int a [] [] = new int [3] [4]; Arrays.fill (a, -1); de sorte que tous les 12 éléments seront définis avec -1.
PoornaChandra
1

Avez-vous essayé la fonction Arrays.fill ?

Sam Goldberg
la source
Nan. Je ne l'ai pas utilisé avant.
Ravi Joshi
Pourriez-vous s'il vous plaît également donner un exemple à quoi cela pourrait ressembler?
Aenadon
@Aenadon: voir la réponse acceptée qui montre la fonction Arrays.fill.
Sam Goldberg
0

Vous pouvez utiliser Arrays.fill(array, -1).


la source
0

Évidemment, vous pouvez utiliser Arrays.fill (), mais la façon dont vous l'avez fait fonctionne également.

Renuz
la source
Ya. Arrays.fill()Utilise même une forboucle avec index 0to size-1. De la même manière, ce que j'ai fait. Merci pour votre réponse.
Ravi Joshi
0

Utilisation de Java 8, vous pouvez simplement utiliser ncopiesde la Collectionsclasse:

Object[] arrays = Collections.nCopies(size, object).stream().toArray();

Dans votre cas, ce sera:

Integer[] arrays = Collections.nCopies(10, Integer.valueOf(1)).stream().toArray(Integer[]::new);
.

Voici une réponse détaillée à un cas similaire du vôtre.

hd84335
la source
0

Pour les listes que vous pouvez utiliser

Collections.fill(arrayList, "-")

Mohan Munisifreddy
la source