Autor
Aditi Nawghare
Software Engineer at Siemens

Arrays-Klasse

Veröffentlicht in der Gruppe Random-DE
Hallo wieder! :) In der heutigen Lektion werden wir über die Arrays-Klasse in Java sprechen. In der letzten Lektion haben wir eine solche Datenstruktur namens Array kennengelernt. Wir haben gelernt, wie man sie erstellt und mit Daten füllt. Und wir haben uns angeschaut, wie sie im Gedächtnis gespeichert werden. Heute schauen wir uns einige Aufgaben und Beispiele für die Arbeit mit Arrays an, die Sie in der Praxis häufig sehen. Stellen Sie sich zum Beispiel diese Situation vor: Wir haben ein Array mit 10 Zufallszahlen.
int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};
Unsere Aufgabe besteht darin, dieses Array in aufsteigender Reihenfolge zu sortieren: vom kleinsten zum größten. Am Ende sollte es so aussehen: [-234, -2, 16, 26, 35, 43, 92, 99, 167] Wie machen wir das? Diese Aufgabe ist nicht trivial. Das haben wir noch nie gemacht :/ Irgendwelche Ideen? Versuchen zu erraten. Hier ist eine Lösung:
  • Gehen Sie alle Elemente des Arrays durch. Vergleichen Sie jedes Element mit dem nächsten ([0] mit [1], [1] mit [2], [2] mit [3] usw.). Wenn das aktuelle Element größer als das nächste ist, tauschen wir sie aus und fahren dann mit dem nächsten Element fort. Wenn nicht, lassen Sie sie so wie sie sind und machen Sie weiter
  • Somit liegt nach dem ersten Durchlauf der Elemente garantiert der größte Wert (167) in der letzten Zelle.
  • Jetzt gehen wir noch einmal alle Elemente durch, beginnen dieses Mal jedoch mit dem Index [0] bis zum vorletzten Element (die größte Zahl steht bereits an ihrer Stelle) und führen die gleichen Vergleiche und Vertauschungen durch. Nach diesem Durchgang haben wir in der vorletzten Zelle den zweitgrößten Wert (99).
  • Wiederholen Sie diesen Vorgang so oft, wie wir Array-Elemente haben.
Wir haben die Idee. Jetzt müssen wir nur noch den Code schreiben. Es sieht aus wie das: Arrays-Klasse und ihre Verwendung - 2
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       for (int i = numbers.length - 1; i > 0; i--) {
           for (int j = 0; j < i; j++) {
           /* Compare the elements in pairs.
             If they are not in the right order,
             then swap them */
               if (numbers[j] > numbers[j + 1]) {
                   int tmp = numbers[j];
                   numbers[j] = numbers[j + 1];
                   numbers[j + 1] = tmp;
               }
           }
       }

   }
}
Äh ... Es sieht etwas kompliziert aus -_- Auch wenn das allgemeine Prinzip verständlich ist, müssen wir immer noch ziemlich viel Code schreiben, um eine so einfache Aufgabe zu lösen. Okay, vielleicht haben wir uns einfach überschätzt? Die Aufgabe, die wir in Angriff genommen haben, ist für uns wahrscheinlich immer noch zu kompliziert. Versuchen wir etwas Einfacheres. Nehmen Sie zum Beispiel das gleiche Zahlenarray.
int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};
Unsere Aufgabe besteht darin, seinen Inhalt in ein anderes Array zu kopieren.
int [] numbersCopy = new int[10];
Überlegen Sie, wie Sie es mit dem machen würden, was Sie bereits über Arrays wissen? Beispielsweise könnten Sie das Array „Zahlen“ in einer Schleife durchlaufen und seine Elemente nacheinander in „NumbersCopy“ schreiben :
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = new int[10];

       for (int i = 0; i < numbers.length; i++) {

           numbersCopy[i] = numbers[i];
       }

   }
}
Nun ja, hier haben wir es im Grunde geschafft! Es scheint, dass wir das Problem gelöst haben. Wenn Sie dies jedoch häufig tun müssen, verfügt Ihr Code über eine Reihe identischer Schleifen. Tatsächlich wurden diese (und andere) Aufgaben von den Java-Entwicklern schon lange gelöst. Wir müssen nicht „das Rad neu erfinden“ und unsere eigene Lösung programmieren. Es gibt eine spezielle statische Klasse ( Arrays ), die Sie bei der Ausführung allgemeiner Aufgaben bei der Arbeit mit Arrays unterstützt. Dieser Klasse wurden Methoden zur Ausführung der häufigsten Aufgaben hinzugefügt, mit denen Java-Programmierer konfrontiert sind. Beispielsweise wird die Aufgabe, ein Array zu sortieren, die wir zu bewältigen versuchten, in einer einzigen Zeile gelöst:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       Arrays.sort(numbers);

       System.out.println(Arrays.toString(numbers));

   }
}
Die Methode Arrays.sort() sortiert das Array. Und sein Algorithmus ist viel effizienter als der Code, den wir geschrieben haben. Konsolenausgabe: [-234, -2, 16, 26, 35, 43, 80, 92, 99, 167] Hinweis: Um das Array in einen String zu konvertieren, haben wir eine andere Methode der Arrays- Klasse verwendet: Arrays.toString() . Arrays in Java überschreiben die toString()- Methode nicht alleine. Also, wenn Sie einfach schreiben
System.out.println(numbers.toString());
toString() der Object-Klasse wird aufgerufen. Für ein Array sieht die Ausgabe etwa so aus: [I@4554617c Wir werden jetzt nicht näher darauf eingehen, warum genau dies die Ausgabe ist. Die Hauptsache ist, dass es eindeutig nicht das ist, was wir brauchen. Aber Arrays.toString() macht genau das, was wir wollen. Das Kopieren gelingt übrigens auch problemlos mit der Klasse Arrays :
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = Arrays.copyOf(numbers, numbers.length);
       System.out.println(Arrays.toString(numbersCopy));

   }
}
Wir übergeben der Methode Arrays.copyOf() unser ursprüngliches Array (aus dem wir Werte kopieren möchten) und die Länge des neuen Arrays, in das wir Daten kopieren. In diesem Fall haben wir „numbers.length“ als Länge angegeben, da wir das gesamte Array kopieren möchten. Wenn wir nur die ersten paar Elemente kopieren möchten, können wir die Länge eines neuen kleineren Arrays angeben:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = Arrays.copyOf(numbers, 4);
       System.out.println(Arrays.toString(numbersCopy));

   }
}
Hier haben wir 4 als Länge des neuen Arrays angegeben. Dementsprechend werden nur die ersten 4 Elemente von Zahlen in das neue Array kopiert. Konsolenausgabe: [167, -2, 16, 99] Übrigens können Sie mit Arrays auch einen Teil eines Arrays von der Mitte statt vom Anfang des Arrays kopieren:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {167, -2, 16, 99, 26, 92, 43, -234, 35, 80};

       int [] numbersCopy = Arrays.copyOfRange(numbers, 2,6);
       System.out.println(Arrays.toString(numbersCopy));

   }
}
Ausgabe: [16, 99, 26, 92] Zahlen wurden vom zweiten (einschließlich) bis zum sechsten (nicht inklusive) Element aus dem zweiten Array in das neue Array kopiert. Möglicherweise müssen wir auch zwei Arrays vergleichen. Wie bei der toString()- Methode überschreiben die Arrays selbst nicht die equal()- Methode. Wenn wir also versuchen, sie so zu vergleichen
public class Main {

   public static void main(String[] args) {

       int[] numbers = {1, 2, 3};
       int[] numbers2 = {1, 2, 3};

       System.out.println(numbers.equals(numbers2));
   }
}
dann bekommen wir falsch. Dies liegt daran, dass Object.equals() aufgerufen wird, das Referenzen vergleicht. Und offensichtlich sind sie unterschiedlich! Aber was wir brauchen, ist, Array-Inhalte zu vergleichen, nicht Referenzen. Die Arrays- Klasse überschreibt die Methode equal() , damit sie genau das tut, was wir wollen:
public class Main {

   public static void main(String[] args) {

       int[] numbers = {1, 2, 3};
       int[] numbers2 = {1, 2, 3};

       System.out.println(Arrays.equals(numbers, numbers2));
   }
}
Ausgabe: true Die Klasse Arrays funktioniert übrigens nicht nur mit gewöhnlichen Arrays, sondern auch mit zweidimensionalen:
public class Main {

   public static void main(String[] args) {

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

       int[][] numbersCopy = Arrays.copyOf(numbers, numbers.length);

       System.out.println("Are these two-dimensional arrays equal?");
       System.out.println(Arrays.deepEquals(numbers, numbersCopy));

       System.out.println(Arrays.deepToString(numbersCopy));
   }
}
Ausgabe: Sind diese zweidimensionalen Arrays gleich? true [[1, 2, 3], [4, 5, 6], [7, 8, 9]] Wie Sie sehen, konnte die Methode Arrays.copyOf() ein zweidimensionales Array kopieren. Und die Klasse verfügt über spezielle Methoden zum Vergleichen und Anzeigen zweidimensionaler Arrays: deepEquals und deepToString() . In Zukunft werden Sie immer wieder sehen (und sich darüber freuen), dass die Entwickler von Java viele Situationen, mit denen Programmierer häufig konfrontiert sind, vorhergesehen und vorgefertigte Lösungen für sie in der Sprache implementiert haben. Die Nutzung dieser Lösungen ist viel einfacher und bequemer, als das Rad neu zu erfinden, oder? :) Lesen Sie unbedingt die Dokumentation zur Arrays-Klasse auf der Oracle- Website. Viel Erfolg im Studium!
Kommentare
  • Beliebt
  • Neu
  • Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Auf dieser Seite gibt es noch keine Kommentare