CodeGym /Java-Blog /Random-DE /Etwas über Arrays
Autor
Volodymyr Portianko
Java Engineer at Playtika

Etwas über Arrays

Veröffentlicht in der Gruppe Random-DE
Hallo! Zuvor haben wir in Ihrer Schulung mit einzelnen Objekten (und primitiven Typen) gearbeitet. Was aber, wenn wir nicht nur mit einem, sondern mit einer ganzen Gruppe von Objekten arbeiten müssen? Angenommen, wir möchten eine Liste mit den Geburtstagen aller Mitarbeiter unseres Unternehmens erstellen. Es sollte 30 Zeichenfolgen enthalten, die wie folgt formatiert sind: „Sarah Huffman, 25. Januar“ Wir profitieren von einer speziellen Datenstruktur namens Array . Wenn wir ein Array mit einem realen Objekt vergleichen, ist es einem Banktresor mit Schließfächern sehr ähnlich: Etwas über Arrays – 1Ein Array besteht ebenfalls aus „Boxen“. Sie können in jedes Feld etwas (ein Element) einfügen. Um auf ein Element zuzugreifen, müssen Sie dessen Boxnummer (Index) kennen. So entsteht ein Array:

public class Main {

   public static void main(String[] args) {

       String [] birthdays = new String[10];
      
   }
}
Hier erstellen wir ein Array, das 10 Elemente enthält. Einige Merkmale des Arrays können Sie sofort erkennen:
  1. Es speichert Elemente eines genau definierten Datentyps . Wenn wir ein String-Array erstellen, können wir darin nichts anderes speichern. Der Datentyp wird beim Erstellen des Arrays angegeben . Darin liegt der Unterschied zu einem Bankschließfach (in dem der Kunde aufbewahren kann, was er möchte).

  2. Seine Größe muss beim Erstellen des Arrays angegeben werden . Sie können es später nicht angeben oder seine Größe ändern, nachdem das Array erstellt wurde .
Die Tatsache, dass wir ein Array erstellen, wird durch die eckigen Klammern auf beiden Seiten des Ausdrucks angezeigt. Sie können vor oder nach dem Namen der Referenzvariablen angegeben werden. So oder so wird es funktionieren:

String [] birthdays = new String[10];
String birthdays [] = new String[10];
Wenn Sie etwas in ein Array schreiben möchten, müssen Sie den Index des Felds angeben, in das der Wert geschrieben werden soll. Die Felder in einem Array werden beginnend bei 0 nummeriert. Das Zählen beginnend bei Null ist eine weit verbreitete Praxis in der Programmierung. Je schneller Sie sich daran gewöhnen, desto besser :) Das heißt, wenn Sie dem ersten FeldEtwas über Arrays – 2 einen Wert hinzufügen möchten , gehen Sie wie folgt vor:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
   }
}
Jetzt wird Janas Geburtstag in der ersten Zelle unseres Arrays von Mitarbeitergeburtstagen gespeichert: Auf ähnliche Weise können Sie weitere Werte hinzufügen:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";
   }
}
Beachten Sie, dass wir Rosies Geburtstag zum achten Feld hinzugefügt haben (Sie haben nicht vergessen, warum Feld Nr. 7 das achte Feld ist, oder?) . Sie sehen, dass wir nicht alle anderen Zellen gefüllt haben. Wir müssen Werte nicht der Reihe nach in ein Array schreiben. Es gibt keine solche Anforderung. Wenn Sie die Elemente in der richtigen Reihenfolge schreiben, ist es natürlich viel einfacher, den Überblick darüber zu behalten, wie viele Boxen frei und wie viele belegt sind, und es verhindert, dass das Array „Löcher“ aufweist. Wenn Sie den Inhalt eines der Schließfächer erhalten möchten, müssen Sie (genau wie bei einem Schließfach) dessen Nummer kennen. So wird es gemacht:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";

       String rosieBirthday = birthdays[7];
       System.out.println(rosieBirthday);
   }
}
Konsolenausgabe: Rosie Mills, 3. Januar Wir haben eine StringVariable erstellt und dem Compiler gesagt: „Suchen Sie das Feld mit Index 7 im Geburtstagsarray und weisen Sie den dort enthaltenen Wert der StringVariablen rosieBirthday zu .“ Und genau das hat es getan. Wenn wir mit Arrays arbeiten, können wir ihre Länge mithilfe einer speziellen Eigenschaft leicht ermitteln: length .

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";

       int birthdaysLength = birthdays.length;
       System.out.println(birthdaysLength);
   }
}
Konsolenausgabe: 10 Hinweis: Die lengthEigenschaft speichert die Array-Größe, nicht die Anzahl der vollen Felder. Unser Array speichert nur 3 Werte, aber wir haben bei der Erstellung seine Größe mit 10 angegeben. Und genau diesen Wert gibt das lengthFeld zurück. Warum sollte das nützlich sein? Angenommen, Sie möchten eine Liste aller Geburtstage anzeigen (um sicherzustellen, dass niemand vergessen wird). Sie können dies in einer einfachen Schleife tun:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[2] = "Jeremiah Leonard, July 12";
       birthdays [3] = "Kenny Russo, September 7";
       birthdays[4] = "Tommie Barnes, November 9";
       birthdays [5] = "Roman Baranov, August 14";
       birthdays [6] = "Chanice Andersen, April 1";
       birthdays[7] = "Rosie Mills, January 3";
       birthdays [8] = "Keenan West, October 19";
       birthdays [9] = "Abraham McArthur, May 3";

       for (int i = 0; i < birthdays.length; i++) {
           System.out.println(birthdays[i]);
       }
   }
}
In der Schleife deklarieren wir die Variable i, die auf Null initialisiert wird. Bei jedem Durchgang holen wir uns das Element mit Index i aus unserem Array und zeigen seinen Wert an. Die Schleife führt 10 Iterationen durch und i erhöht sich von 0 auf 9 – und Zahlen sind zufällig die Indizes der Elemente unseres Arrays! Als Ergebnis werden alle Werte von Geburtstagen[0] bis Geburtstagen[9] angezeigt . Tatsächlich gibt es eine andere Möglichkeit, ein Array zu erstellen. Sie können beispielsweise ein Array von ints wie folgt erstellen:

public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
   }
}
Diese Technik wird als „Shortcut-Initialisierung“ bezeichnet. Das ist ziemlich praktisch, weil wir gleichzeitig ein Array erstellen und es mit Werten füllen. Wir müssen die Array-Größe nicht explizit angeben: Bei der Shortcut-Initialisierung lengthwird das Feld automatisch festgelegt.

public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
       System.out.println(numbers.length);
   }
}
Konsolenausgabe: 9 Nun ein wenig darüber, wie Arrays im Speicher gespeichert werden. Nehmen wir an, wir haben ein Array aus drei CatObjekten:

public class Cat {

   private String name;

   public Cat(String name) {
       this.name = name;
   }

   public static void main(String[] args) {

       Cat[] cats = new Cat[3];
       cats[0] = new Cat("Thomas");
       cats[1] = new Cat("Behemoth");
       cats[2] = new Cat("Lionel Messi");
   }
}
Hier müssen Sie einige Dinge verstehen:
  1. Im Fall von Grundelementen speichert ein Array eine Reihe spezifischer Werte (z. B. ints). Bei Objekten speichert ein Array eine Reihe von Referenzen .
    Das catsArray besteht aus drei Elementen, von denen jedes eine Referenz auf ein CatObjekt ist. Jeder der Verweise verweist auf die Speicheradresse, an der das entsprechende Objekt gespeichert ist.

  2. Array-Elemente werden in einem einzigen Block im Speicher angeordnet. Dies geschieht, um einen schnellen und effizienten Zugriff darauf zu ermöglichen.
Verweist somit catsauf den Speicherblock, in dem alle Objekte (Array-Elemente) gespeichert sind. Cats[0]verweist auf eine bestimmte Adresse innerhalb dieses Blocks. Etwas über Arrays – 3 Es ist wichtig zu verstehen, dass ein Array nicht nur Objekte speichert: Es ist selbst ein Objekt. Dies führt uns zu der Frage, ob wir nicht nur Arrays aus Zeichenfolgen oder Zahlen, sondern auch Arrays aus Arrays erstellen können . Und die Antwort lautet: Ja, das können wir! Ein Array kann beliebige Objekte speichern, auch andere Arrays. Ein solches Array wird als zweidimensional bezeichnet . Wenn wir es visuell darstellen würden, wäre es einem gewöhnlichen Tisch sehr ähnlich. Angenommen, wir möchten ein Array aus 3 Arrays erstellen , die jeweils 10 ints speichern können. Es würde so aussehen:
Etwas über Arrays – 4
Jede Zeile stellt ein intArray dar. Das erste Array enthält Zahlen von 1 bis 10, das zweite Array – von -1 bis -10 und das dritte – eine Reihe von Zufallszahlen. Jedes dieser Arrays wird in den Boxen unseres zweidimensionalen Arrays gespeichert. Im Code sieht die Initialisierung eines zweidimensionalen Arrays folgendermaßen aus:

public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
Unser zweidimensionales Array cats speichert 3 Arrays mit 5 Boxen in jedem Array. Wenn wir ein Objekt in das dritte Feld des zweiten Arrays einfügen möchten , würden wir Folgendes tun:

public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
   cats[1][2] = new Cat("Fluffy");
}
[1]gibt das zweite Array und [2]das dritte Feld dieses Arrays an. Da ein zweidimensionales Array aus mehreren Arrays besteht, benötigen wir eine verschachtelte Schleife, um es zu durchlaufen und alle seine Werte anzuzeigen (oder alle seine Elemente zu füllen):

for (int i = 0; i < cats.length; i++) {
   for (int j = 0; j < cats[i].length; j++) {
       System.out.println(cats[i][j]);
   }
}
In der äußeren Schleife (Variable i) iterieren wir über alle Arrays in unserem zweidimensionalen Array. In der inneren Schleife (Variable j) durchlaufen wir alle Elemente jedes Arrays. Als Ergebnis wird zuerst cats[0][0] (erstes Array, erstes Element) angezeigt, gefolgt von cats[0][1] (erstes Array, zweites Element). Nachdem wir das erste Array durchgegangen sind, zeigen wir cats[1][0] , cats[1][1] , cats[1][2] usw. an. Übrigens werden auch zweidimensionale Arrays unterstützt Kurzinitialisierung:

int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
Normalerweise würden wir das zweidimensionale Array numbersals deklarieren int[3][3], aber mit dieser Abkürzung können wir die Werte sofort angeben. Warum benötigen Sie ein zweidimensionales Array? Nun, damit könnte man ganz einfach das berühmte „Battleship“-Spiel nachbilden: Etwas über Arrays – 5 In „Battleship“ lässt sich die Struktur des Spielfelds leicht beschreiben: ein zweidimensionales Array aus 10 Arrays mit jeweils 10 Elementen. Sie erstellen zwei dieser Arrays (eines für Sie und eines für Ihren Gegner).

int[][] battleshipBoard1 = new int[10][10];
int[][] battleshipBoard2 = new int[10][10];
Verwenden Sie einige Werte (z. B. Zahlen oder Symbole), um die Elemente zu füllen, die dem Standort Ihrer Schiffe entsprechen, und rufen Sie dann abwechselnd die Koordinaten für bestimmte Elemente auf:
  • SchlachtschiffBoard1[0][2]!
  • Vermissen! SchlachtschiffBoard2[2][4]!
  • Schlag!
  • SchlachtschiffBoard2[2][5]!
  • Schlag!
  • SchlachtschiffBoard2[2][6]!,
  • Untergegangen!
Damit ist unsere erste Einführung in Arrays abgeschlossen, aber es ist erst der Anfang unserer Interaktion mit ihnen. In den folgenden Lektionen sehen wir interessante Möglichkeiten, wie sie verwendet werden können, und erfahren auch, welche integrierten Funktionen Java hat, damit wir bequemer mit dieser Datenstruktur arbeiten können :)
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION