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: Auch 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:
- 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. - 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. - 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.
[]
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 Arrays 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 String
und dem Compiler gesagt: „Suchen Sie die Zelle mit Index 7 im Array birthdays
und 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 length
speichert 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 int
kann 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 length
wird 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 ObjektenCat
:
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:
- Im Fall von Primitiven speichern Java-Arrays viele spezifische Werte (z. B. Zahlen
int
). Bei Objekten speichert ein Array viele Referenzen. Das Arraycats
besteht aus drei Zellen, von denen jede einen Verweis auf ein Objekt enthältCat
. Jeder der Links verweist auf eine Adresse im Speicher, an der das Objekt gespeichert ist. - Array-Elemente werden in einem einzigen Block im Speicher gespeichert. Dies geschieht für einen effizienteren und schnelleren Zugriff darauf. Somit
cats
zeigt der Link auf einen Block im Speicher, in dem alle Objekte – die Elemente des Arrays – gespeichert sind. Acats[0]
– an eine bestimmte Adresse innerhalb dieses Blocks.
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 Zahlenarraysint
mit jeweils 10 Zellen speichert. Es wird so aussehen: Jede 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 numbers
als 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: Die 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.- Arrays in Java – ein ausführlicher Artikel über Arrays, ihre Erstellung, Initialisierung und Verwendung. Mit Beispielen.
- Die Arrays-Klasse und ihre Verwendung – der Artikel beschreibt einige Methoden der Klasse
Array
- Arrays ist die erste JavaRush-Vorlesung, die sich Arrays widmet.
- Mehrdimensionale Arrays – ein ausführlicher Artikel über mehrdimensionale Arrays mit Beispielen.
- 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.
GO TO FULL VERSION