1.Arrays.fill()

Bei der Arbeit mit Arrays müssen Java-Programmierer das Array sehr oft mit demselben Wert füllen. Sie können natürlich eine Schleife schreiben und einfach jeder Zelle des Arrays in der Schleife einen Wert zuweisen:

int[] x = new int[100];
for (int i = 0; i < x.length; i++)
x[i] = 999;

Oder Sie rufen einfach die Arrays.fill()Methode auf, die genau das Gleiche tut: Sie füllt das übergebene Array mit dem übergebenen Wert. So sieht es aus:

Arrays.fill(name, value)

Und der Code im obigen Beispiel kann noch etwas kompakter und übersichtlicher gestaltet werden:

int[] x = new int[100];
Arrays.fill(x, 999);

Sie können die Methode auch verwenden Arrays.fill(), um nicht das gesamte Array, sondern einen Teil davon mit einem Wert zu füllen:

Arrays.fill(name, first, last, value)

Wobei first und last die Indizes der ersten und letzten zu füllenden Zellen sind.

Denken Sie gemäß der guten alten Java-Tradition daran, dass das letzte Element nicht im Bereich enthalten ist.

Beispiel:

int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

Arrays.fill(x, 3, 7, 999);


String str = Arrays.toString(x);


Wir füllen die Zellen x[3], x[4], x[5]und x[6]mit dem Wert 999. Zellen eines Arrays werden von Null beginnend nummeriert!

Die strVariable enthält den Wert:
"[1, 2, 3, 999, 999, 999, 999, 8, 9, 10]"

Die Arrays.fill()Methode funktioniert nur mit eindimensionalen Arrays. Wenn Sie der Methode ein zweidimensionales Array übergeben, wird es als eindimensional behandelt, mit allen daraus resultierenden Konsequenzen.



2.Arrays.copyOf()

Wie Sie bereits wissen, können Sie die Größe eines Arrays nach seiner Erstellung nicht mehr ändern.

Aber was ist, wenn Sie es wirklich wollen?

Nun, wenn Sie es wirklich wollen, dann können Sie es!

  • Erstellen Sie ein neues Array mit der gewünschten Länge
  • Kopieren Sie alle Elemente aus dem ersten Array hinein.

Genau das Arrays.copyOf()macht die Methode übrigens. So sieht der Aufruf aus:

Type[] name2 = Arrays.copyOf(name, length);

Diese Methode verändert nicht das bestehende Array , sondern erstellt stattdessen ein neues Array und kopiert die Elemente des alten Arrays hinein.

Wenn die Elemente nicht passen (die Länge ist kleiner als die Länge des vorhandenen Arrays ), werden die zusätzlichen Werte ignoriert.

Wenn die Länge des neuen Arrays größer ist als die Länge des alten, werden die Zellen mit Nullen gefüllt.

Beispiel:

int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int[] x2 = Arrays.copyOf(x, 5);
String str2 = Arrays.toString(x2);

int[] x3 = Arrays.copyOf(x, 15);
String str3 = Arrays.toString(x3);


Die str2Variable enthält den Wert:
"[1, 2, 3, 4, 5]"

Die str3Variable enthält den Wert:
"[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0]"

3.Arrays.copyOfRange()

Und was ist, wenn Sie aus einem Array der Länge 10 ein Array der Länge 5 erhalten möchten, dieses aber die letzten 5 Elemente und nicht die ersten 5 enthalten muss?

In diesem Fall wird sich eine andere Methode der ArraysKlasse als nützlich erweisen – die Arrays.copyOfRange(). So sieht es aus, wenn wir es aufrufen:

Type[] name2 = Arrays.copyOfRange(name, first, last);

Diese Methode erstellt ebenfalls ein neues Array, füllt es jedoch mit Elementen von einer beliebigen Stelle im ursprünglichen Array. Wobei first und last die Indizes des ersten und letzten Elements sind, die in das neue Array eingefügt werden sollen.

Denken Sie gemäß der guten alten Java-Tradition daran, dass das letzte Element nicht im Bereich enthalten ist.

Beispiel:

int[] x = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

int[] x2 = Arrays.copyOfRange(x, 5, 10);
String str2 = Arrays.toString(x2);

int[] x3 = Arrays.copyOfRange(x, 5, 15);
String str3 = Arrays.toString(x3);


Die str2Variable enthält den Wert:
"[16, 17, 18, 19, 20]"

Die str3Variable enthält den Wert:
"[16, 17, 18, 19, 20, 0, 0, 0, 0, 0]"


4.Arrays.sort()

Ah, der leckerste Leckerbissen: Sortieren . Arrays werden in der Programmierung häufig sortiert. Die drei häufigsten Aktionen beim Arbeiten mit Arrays sind:

  • Sortieren eines Arrays
  • Ermitteln des minimalen (oder maximalen) Elements eines Arrays
  • Bestimmen des Index eines Elements in einem Array (Suchen eines Elements in einem Array)

Genau aus diesem Grund haben die Entwickler von Java die sort()Methode in die ArraysKlasse aufgenommen. So sieht der Aufruf aus:

Arrays.sort(name);

Diese Methode sortiert das übergebene Array in aufsteigender Reihenfolge.

Beispiel:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};

Arrays.sort(x);

String str = Arrays.toString(x);



Die strVariable enthält den Wert:
"[-20, -20, -20, -2, 0, 3, 8, 11, 99, 999]"

Ausgezeichnet, oder? Sie haben eine Methode aufgerufen und jetzt haben Sie ein sortiertes Array. Schön.

Mit dieser Methode können Sie übrigens nicht nur das gesamte Array, sondern nur einen Teil davon sortieren. So sieht der Aufruf aus:

Arrays.sort(name, first, last);

Dabei sind „first“ und „last“ die Indizes der ersten und letzten Zellen, die bei der Sortierung berührt werden sollen.

Denken Sie gemäß der guten alten Java-Tradition daran, dass das letzte Element nicht im Bereich enthalten ist.

Beispiel:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};

Arrays.sort(x, 4, 8);
String str = Arrays.toString(x);


Die strVariable enthält den Wert:
"[11, -2, 3, 0, -20, -20, 8, 999, 99, -20]"

Zum Sortieren von Arrays verwendet Java den schnellsten Sortieralgorithmus – QuickSort . Sein Rechenaufwand hängt von der Größe des Arrays ab und wird mit der Formel N log(N) berechnet.

Das Sortieren eines Arrays mit 1.000 Elementen erfordert etwa 3.000 Vergleiche von Array-Elementen. Das Sortieren eines Arrays mit einer Million Elementen erfordert etwa 6 Millionen Vergleiche.



5.Arrays.binarySearch()

Nun, und die letzte der interessantesten Methoden der ArraysKlasse ist die Suche nach einem bestimmten Wert in einem Array. Dies ist keine gewöhnliche Suche – es ist die beliebte binäre Suche . Es läuft darauf hinaus:

  • Zunächst wird das Array sortiert.
  • Dann wird das mittlere Element des Arrays mit dem gesuchten verglichen.
  • Wenn das Element größer als das mittlere Element ist, wird die Suche in der rechten Hälfte des Arrays fortgesetzt.
  • Wenn das gesuchte Element kleiner als das mittlere Element ist, wird die Suche in der linken Hälfte des Arrays fortgesetzt.

Da das Array sortiert ist, ist es möglich, die Hälfte davon in einem einzigen Vergleich zu eliminieren. Dann werfen wir im nächsten Schritt eine weitere Hälfte weg und so weiter.

Dieser Ansatz macht die binäre Suche sehr schnell. In einem Array von einer Million (!) Elementen kann es den Index des gewünschten Elements in nur 20 Vergleichen finden. Der Nachteil des Ansatzes besteht darin, dass das Array zunächst sortiert werden muss und das Sortieren auch Zeit kostet.

So sieht der Aufruf aus:

int index = Arrays.binarySearch(name, value);

Wo namesteht der Name des Arrays, das bereits sortiert übergeben werden muss (z. B. mit der Arrays.sort()Methode). Und valueist das Element, nach dem wir im Array suchen. Das von der Methode zurückgegebene Ergebnis ist der Index des gewünschten Array-Elements .

Beispiele:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};
Arrays.sort(x);

int index1 = Arrays.binarySearch(x, 0);
int index2 = Arrays.binarySearch(x, -20);
int index3 = Arrays.binarySearch(x, 99);
int index4 = Arrays.binarySearch(x, 5);
xIst:
{-20, -20, -20, -2, 0, 3, 8, 11, 99, 999}

4
1(Indizes 0und 2sind ebenfalls akzeptabel)
8
-7

Wenn das Array mehrere Instanzen des gesuchten Elements enthält, gibt der Algorithmus einfach den Index einer davon zurück (es gibt keine Garantie dafür, dass es sich beispielsweise um die allererste handelt oder umgekehrt – um die allerletzte davon). doppelte Elemente).

Wenn das Element nicht im Array gefunden wird, ist der Index negativ.



6. Link zur Oracle-Dokumentation zur ArraysKlasse

Wenn Sie großes Interesse haben, können Sie alles über die ArraysKlasse und alle ihre Methoden in der offiziellen Dokumentation a href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base lesen /java/util/Arrays.html">auf der Oracle-Website.

Sie können sich zum Beispiel über die Arrays.mismatch()und- Arrays.compare()Methoden informieren. Vielleicht finden Sie sie irgendwie nützlich.

Und lassen Sie sich nicht von der Anzahl der Methoden verwirren. Für jede Methode gibt es 5–10 Varianten, die sich lediglich in ihren Parametertypen unterscheiden.