So initialisieren Sie alle Elemente eines Arrays mit einem bestimmten Wert in Java

108

In haben C/C++wir eine memset()Funktion, die meinen Wunsch erfüllen kann, aber Javawie kann ich alle Elemente auf einen bestimmten Wert initialisieren? Wenn wir schreiben int[] array=new int[10];, initialisieren wir einfach ein Array der Größe 10, bei dem alle Elemente gleich Null sind. Ich möchte nur diese Initialisierungs-Ganzzahl für eines meiner Arrays ändern. dh ich möchte ein Array initialisieren, bei dem alle Elemente gleich sind -1. Andernfalls muss ich forunmittelbar nach der Initialisierung eine Schleife einfügen, die von Index 0zu Index reicht , size-1und innerhalb dieser Schleife weise ich ein Element zu -1. Unten finden Sie den Code für mehr Verständnis.

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

Gehe ich richtig Gibt es einen anderen Weg dafür?

Ravi Joshi
quelle

Antworten:

212

Wenn es sich um einen primitiven Typ handelt, können Sie Folgendes verwenden Arrays.fill():

Arrays.fill(array, -1);

[ Übrigens ist memsetin C oder C ++ nur für Arrays von wirklich von Nutzen char. ]]

Oliver Charlesworth
quelle
17
Ich habe den Quellcode von überprüft Arrays.fill(). Es macht das Gleiche. public static void fill(int[] a, int val) { for (int i = 0, len = a.length; i < len; i++) a[i] = val; }
Ravi Joshi
2
Ja. So wie es sein sollte. Obwohl ich vermute, dass die JIT intelligent genug ist, um die grundlegende Implementierung zu verbessern.
Louis Wasserman
1
Ich bin nicht einverstanden. memsetkann auch in ganzzahligen Arrays verwendet werden und ist in der Tat sehr nützlich, wenn Sie mit 0oder -1beispielsweise bei DP-Problemen füllen müssen .
Sнаđошƒаӽ
@ Sнаđошƒаӽ - Nicht tragbar.
Oliver Charlesworth
1
Nur zu Ihrer Information: Sie können memset_pattern4, 8 & 16 für andere ganzzahlige Größen verwenden.
Geowar
32

Es gibt auch

int[] array = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
Gilbert Le Blanc
quelle
12
Was ist, wenn die Größe des Arrays unbekannt ist?
Abhishek Kumar
5

Es ist auch mit Java 8-Streams möglich:

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

Wahrscheinlich nicht die effizienteste Art, die Arbeit zu erledigen.

Alexey
quelle
Dies würde auch für nicht-primitive Typen ( Stream.generate(() -> new Whatever("Hello World", 42)).limit(count).toArray();) funktionieren und ist daher flexibler als Arrays.fill (). Ich bin mir jedoch nicht sicher über die Effizienz, wie Sie sagen.
Christopher Riches
3

Sie könnten dies tun, wenn es kurz ist:

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

aber das wird schlecht für mehr als nur ein paar.

Einfacher wäre eine forSchleife:

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

Bearbeiten: Ich mag auch die Arrays.fill()Option, die andere Leute erwähnt haben.

Danation
quelle
Gibt es eine Möglichkeit, ein zweidimensionales Array zu initialisieren? so etwas wie int a [] [] = new int [3] [4]; Arrays.fill (a, -1); so dass alle 12 Elemente mit -1 gesetzt werden.
PoornaChandra
1

Haben Sie die Funktion Arrays.fill ausprobiert ?

Sam Goldberg
quelle
Nee. Ich habe es vorher nicht benutzt.
Ravi Joshi
Könnten Sie bitte auch ein Beispiel geben, wie dies aussehen könnte?
Aenadon
@Aenadon: Siehe die akzeptierte Antwort, die die Funktion Arrays.fill zeigt.
Sam Goldberg
0

Sie können verwenden Arrays.fill(array, -1).


quelle
0

Offensichtlich können Sie Arrays.fill () verwenden. Die Art und Weise, wie Sie es gemacht haben, funktioniert jedoch auch.

Renuz
quelle
Ja. Auch Arrays.fill()verwendet eine forSchleife mit dem Index 0zu size-1. Genauso wie ich. Vielen Dank für Ihre Antwort.
Ravi Joshi
0

Mit Java 8, können Sie einfach ncopiesvon CollectionsKlasse:

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

In Ihrem Fall wird es sein:

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

Hier ist eine detaillierte Antwort auf einen ähnlichen Fall von Ihnen.

hd84335
quelle
0

Für Listen können Sie verwenden

Collections.fill(arrayList, "-")

Mohan Munisifreddy
quelle