JavaRush /Java-Blog /Random-DE /Etwas über Arrays in Java

Etwas über Arrays in Java

Veröffentlicht in der Gruppe Random-DE
Hallo! Zuvor haben wir während des Trainings mit einzelnen Objekten (oder primitiven Typen) gearbeitet. Was aber, wenn wir nicht mit einem Objekt, sondern mit einer ganzen Gruppe arbeiten müssen? Beispielsweise möchten wir eine Liste mit den Geburtstagen aller Mitarbeiter unseres Unternehmens erstellen. Es sollte beispielsweise 30 Zeilen im Format „Andrey Petrov, 25. Januar“ enthalten. Dabei hilft uns eine spezielle Datenstruktur, ein Array. Wenn man das Array mit Objekten aus dem echten Leben vergleicht, ähnelt sein Aufbau stark einem Banktresor mit Zellen: Etwas über Arrays in Java - 1Auch das Array besteht aus Zellen. Sie können in jede Zelle etwas einfügen. In diesem Fall müssen Sie die Handynummer kennen, um auf den Inhalt zugreifen zu können. Das Array wird wie folgt erstellt:
public class Main {

   public static void main(String[] args) {

       String [] birthdays = new String[10]; // Array von Java-Strings

   }
}
Hier haben wir ein Array aus 10 Zellen erstellt. Auf einige Merkmale des Arrays können Sie sofort achten:
  1. Es speichert Daten eines streng definierten Typs. Wenn wir zunächst ein String-Array erstellt haben String, können wir darin nichts anderes speichern. Der Datentyp wird beim Erstellen des Arrays angegeben. Das unterscheidet es von einem Bankschließfach, in dem der Kunde alles aufbewahren kann, was er möchte.
  2. Ein Array kann Daten primitiver Typen (z. B. int), Zeichenfolgen ( String) oder Objekte derselben Klasse speichern. Genauer gesagt nicht einmal die Objekte selbst, sondern Links zu diesen Objekten.
  3. Die Größe des Arrays muss bei der Erstellung angegeben werden. Sie können es später nicht mehr angeben oder seine Größe nach der Erstellung ändern.
Java zeigt an, dass ein Array erstellt wird, indem []auf beiden Seiten des Ausdrucks eckige Klammern verwendet werden. Sie können vor oder nach dem Namen der Referenzvariablen angegeben werden – es funktioniert so oder so:
//Java-Arrays von Zeichenfolgen, zwei Syntaxen
String [] birthdays = new String[10];
String birthdays [] = new String[10];
Wenn Sie etwas in ein Array schreiben möchten, müssen Sie die Nummer der Zelle angeben, in die der Wert geschrieben werden soll. Array-Zellennummern beginnen bei 0. Bei der Programmierung ist es üblich, bei Null zu beginnen. Je schneller Sie sich daran gewöhnen, desto besser :) Das heißt, wenn Sie einen Wert in die erste Zelle des ArraysEtwas über Arrays in Java - 2 einfügen möchten , gehen Sie folgendermaßen vor:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = „Lena Eliseeva, 12. März“;
   }
}
Nun enthält die erste Zelle unseres Arrays, das die Geburtstage der Kollegen enthält, eine Zeichenfolge mit Lenas Geburtstag. Analog dazu können Sie weitere Werte hinzufügen:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = „Lena Eliseeva, 12. März“;
       birthdays[1] = „Kolya Romanov, 18. Mai“;
       birthdays[7] = „Olesya Ostapenko, 3. Januar“;
   }
}
Bitte beachten Sie: Wir haben Olesyas Geburtstag zur achten Zelle hinzugefügt (haben Sie vergessen, warum Zelle Nr. 7 die achte ist?). Obwohl alle anderen Zellen nicht ausgefüllt sind. Es ist nicht notwendig, die Werte der Reihe nach in das Array zu schreiben – eine solche Einschränkung gibt es nicht. Wenn Sie hingegen der Reihe nach schreiben, ist es viel einfacher, die Anzahl der freien und belegten Zellen im Auge zu behalten, und es bleiben keine „Löcher“ im Array übrig. Wenn Sie den Inhalt einer Array-Zelle abrufen möchten, wie im Fall einer Bankzelle, müssen Sie deren Nummer kennen. Das geht so:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = „Lena Eliseeva, 12. März“;
       birthdays[1] = „Kolya Romanov, 18. Mai“;
       birthdays[7] = „Olesya Ostapenko, 3. Januar“;

       String olesyaBirthday = birthdays[7];
       System.out.println(olesyaBirthday);
   }
}
Konsolenausgabe:

Олеся Остапенко, 3 января
Wir haben eine Variable erstellt Stringund dem Compiler gesagt: „Suchen Sie die Zelle mit Index 7 im Array birthdaysund weisen Sie der Variablen den dort gespeicherten Wert zu String olesyaBirthday.“ Genau das hat er getan.

Länge des Java-Arrays

Wenn Sie mit einem Array arbeiten, können Sie dessen 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] = „Lena Eliseeva, 12. März“;
       birthdays[1] = „Kolya Romanov, 18. Mai“;
       birthdays[7] = „Olesya Ostapenko, 3. Januar“;

       int birthdaysLength = birthdays.length;
       System.out.println(birthdaysLength);
   }
}
Konsolenausgabe:

10
Notiz:Die Eigenschaft lengthspeichert die Größe des Arrays, nicht die Anzahl der gefüllten Zellen. Unser Array speichert nur 3 Werte, aber als wir es erstellt haben, haben wir dafür Größe = 10 angegeben. Dies ist der Wert, den das Feld zurückgibt length. Warum könnte das nützlich sein? Wenn Sie beispielsweise eine Liste aller Geburtstage auf der Konsole ausdrucken möchten (um zu überprüfen, ob jemand vergessen wurde), können Sie dies in einer einfachen Schleife tun:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = „Lena Eliseeva, 12. März“;
       birthdays[1] = „Kolya Romanov, 18. Mai“;
       birthdays[2] = „Vika Ignatova, 12. Juli“;
       birthdays[3] = „Denis Kozlov, 7. September“;
       birthdays[4] = „Maxim Maslennikow, 9. November“;
       birthdays[5] = „Roman Baranov, 14. August“;
       birthdays[6] = „Valery Pyatkina, 1. April“;
       birthdays[7] = „Olesya Ostapenko, 3. Januar“;
       birthdays[8] = „Kostya Gurko, 19. Oktober“;
       birthdays[9] = „Seryozha Naumov, 3. Mai“;

       for (int i = 0; i < birthdays.length; i++) {
           System.out.println(birthdays[i]);
       }
   }
}
In der Schleife erstellen wir eine Variable i, die zunächst gleich Null ist. Bei jedem Durchgang nehmen wir die Zelle mit dem Index i aus unserem Array und geben ihren Wert auf der Konsole aus. Die Schleife führt 10 Iterationen durch und die Werte von i erhöhen sich von 0 auf 9 – genau entsprechend den Indizes der Zellen unseres Arrays! Auf diese Weise geben wir alle Werte von birthdays[0]bis an die Konsole aus birthdays[9] . Tatsächlich gibt es Möglichkeiten, ein Array anders zu erstellen. Ein Zahlenarray intkann beispielsweise wie folgt erstellt werden:
public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
   }
}
Diese Methode wird „Schnellinitialisierung“ genannt. Das ist sehr praktisch, da wir sofort ein Array erstellen und es mit Werten füllen. Es ist nicht erforderlich, die Größe des Arrays explizit anzugeben – das Feld lengthwird bei der Schnellinitialisierung automatisch ausgefüllt.
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

Java-Objektarray

Sie haben bereits gehört, dass Arrays von Objekten und Arrays von Grundelementen unterschiedlich im Speicher gespeichert werden. Nehmen wir zum Beispiel ein Array aus drei Objekten Cat:
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("Nilpferd");
       cats[2] = new Cat(„Philip Markowitsch“);
   }
}
Hier gibt es ein paar Dinge zu verstehen:
  1. Im Fall von Primitiven speichern Java-Arrays viele spezifische Werte (z. B. Zahlen int). Bei Objekten speichert ein Array viele Referenzen. Das Array catsbesteht aus drei Zellen, von denen jede einen Verweis auf ein Objekt enthält Cat. Jeder der Links verweist auf eine Adresse im Speicher, an der das Objekt gespeichert ist.
  2. Array-Elemente werden in einem einzigen Block im Speicher gespeichert. Dies geschieht für einen effizienteren und schnelleren Zugriff darauf. Somit catszeigt der Link auf einen Block im Speicher, in dem alle Objekte – die Elemente des Arrays – gespeichert sind. A cats[0]– an eine bestimmte Adresse innerhalb dieses Blocks.
Etwas über Arrays in Java - 3Es ist wichtig zu verstehen, dass ein Array nicht nur Objekte speichern kann, sondern selbst ein Objekt ist.

Array von Arrays oder zweidimensionales Array

Auf dieser Grundlage stehen wir vor der Frage: Können wir beispielsweise kein Array aus Zeichenfolgen oder Zahlen, sondern ein Array aus Arrays erstellen? Und die Antwort wird sein: Ja, das können wir! Ein Array kann alle darin enthaltenen Objekte speichern, einschließlich anderer Arrays. Ein solches Array wird als zweidimensional bezeichnet. Wenn Sie es auf einem Bild darstellen, sieht es einem normalen Tisch sehr ähnlich. Beispielsweise möchten wir ein Array erstellen, das drei Zahlenarrays intmit jeweils 10 Zellen speichert. Es wird so aussehen: Etwas über Arrays in Java - 4Jede Zeile stellt ein Array von Zahlen dar int. Das erste Array enthält Zahlen von 1 bis 10, das zweite von -1 bis -10 und das dritte eine Reihe von Zufallszahlen. Jedes dieser Arrays wird in einer Zelle unseres zweidimensionalen Arrays gespeichert. Das Initialisieren eines zweidimensionalen Arrays im Code sieht folgendermaßen aus:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
Unser zweidimensionales Katzen-Array speichert 3 Arrays mit jeweils 5 Zellen. Wenn wir unser Objekt in die dritte Zelle des zweiten Arrays einfügen möchten, gehen wir folgendermaßen vor:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
   cats[1][2] = new Cat("Flaum");
}
[1]zeigt auf das zweite Array und [2]zeigt auf die dritte Zelle dieses Arrays. Da ein zweidimensionales Array aus mehreren Arrays besteht, benötigen wir eine doppelte, verschachtelte Schleife, um es zu durchlaufen und alle Werte auf der Konsole auszugeben (oder alle Zellen 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) durchlaufen wir abwechselnd alle Arrays, aus denen unser zweidimensionales Array besteht. In der inneren Schleife (Variable j) durchlaufen wir alle Zellen jedes Arrays. Dadurch cats[0][0]wird das Objekt (erstes Array, erste Zelle) zuerst auf der Konsole angezeigt und das zweite Objekt cats[0][1](erstes Array, zweite Zelle). Wenn das erste Array erschöpft ist, werden cats[1][0], cats[1][1]usw. cats[1][2]ausgegeben. Die Schnellinitialisierung ist übrigens auch für zweidimensionale Arrays verfügbar:
int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
Normalerweise würden wir ein zweidimensionales Array numbersals schreiben int[3][3], aber diese Methode ermöglicht es uns, die Werte sofort anzugeben. Warum könnte ein zweidimensionales Array erforderlich sein? Nun, mit seiner Hilfe kann man zum Beispiel das berühmte Spiel „Battleship“ ganz einfach nachbilden: Etwas über Arrays in Java - 5Die Struktur des Spielfelds in „Battleship“ ist so, dass sie sich leicht beschreiben lässt: ein zweidimensionales Array aus 10 Arrays mit jeweils 10 Zellen . Sie erstellen zwei solcher Arrays – für sich selbst und Ihren Gegner:
int [][] seaBattle = new int[10][10];
int [][] seaBattle2 = new int[10][10];
Sie füllen *die Zellen, in denen sich Ihre Schiffe befinden, mit einigen Werten (z. B. Zahlen oder Zeichen) aus und rufen dann abwechselnd mit Ihrem Gegner die Zellennummern auf:
  • seaBattle[6][5]!
  • Vergangenheit! seaBattle2[6][6]!
  • Verletzt!
  • seaBattle2[6][7]!
  • Verletzt!
  • seaBattle2[6][8]!,
  • Getötet!

Zusätzliche Ressourcen zu Arrays

Möchten Sie mehr über Arrays erfahren? Bitte werfen Sie einen Blick auf die folgenden Artikel. Zu diesem Thema gibt es viele interessante und nützliche Informationen.
  1. Arrays in Java – ein ausführlicher Artikel über Arrays, ihre Erstellung, Initialisierung und Verwendung. Mit Beispielen.
  2. Die Arrays-Klasse und ihre Verwendung – der Artikel beschreibt einige Methoden der KlasseArray
  3. Arrays ist die erste JavaRush-Vorlesung, die sich Arrays widmet.
  4. Mehrdimensionale Arrays – ein ausführlicher Artikel über mehrdimensionale Arrays mit Beispielen.
  5. Geben Sie ein Array der Länge Null zurück, nicht null – Joshua Bloch, Autor von Effective Programming, spricht darüber, wie Sie leere Arrays besser zurückgeben können.
Damit ist unsere erste Bekanntschaft mit Arrays abgeschlossen, aber dies ist erst der Anfang der Interaktion mit ihnen. In den folgenden Vorlesungen werden wir interessante Möglichkeiten sehen, sie zu verwenden, und auch herausfinden, welche eingebauten Funktionen Java für ein komfortableres Arbeiten mit dieser Datenstruktur hat :)
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION