Arrays und ArrayLists In JAVA Arrays • ... sind eine Sammlung von Werten, die unter einem Namen gespeichert werden (das gilt eigentlich für jede Datenstruktur, aber) • ... Arrays: – können nur gleichartige (Typ) Werte aufnehmen – können ihre Grösse nicht ändern – stellen den Zugriff auf bestimmte Werte über eckige Klammern und einen index bereit: myArray[i] – können Mehrdimensional sein: myArray[i][j] • Ein Array ist also wie ein Regal mit Werten drin Arrays erstellen, Kurzform Typ + [] Name Werte int[] meinArray = {2, 5, 0, 1}; ein „Regal“ mit vier Fächern und den ganzzahligen Werten 2, 5, 0, 1 drin Um auf Werte zuzugreifen braucht es die Nummer des Faches (=Index). Achtung: gezählt wird ab 0! int x = meinArray[1]; x hat den Wert 5 meinArray[0] = 7; im ersten Fach ist eine 7 Arrays erstellen, mehrere Schritte int[] meinArray = new int[4]; //erstellt Array mit 4 leeren Elementen (null) meinArray[0] = 2; //Elemente einfüllen ... meinArray[1] = 5; ... Oft kann man das „Befüllen“ des Arrays mit einer Schleife regeln: for (int i = 0; i < meinArray.length; i++ ) { meinArray[i] = (int) Math.random(); } // gefüllt mit Zufallszahlen zwischen 0 und 1 Man geht oft mit Schleifen durch Arrays: Wenn der Array 10 Elemente hat, dann würde im letzten Durchgang arr[10] benutzt, also das elfte Element! for (int i = 0; i <= arr.length; i++ ) { //mach was mit jedem Element, also arr[i] } • Achtung!: wenn der Index zu gross ist und damit auf ein nicht existierendes Element verweist, dann passiert das: Exception in thread "Animation Thread" java.lang.ArrayIndexOutOfBoundsException: 10 at OutOfBounds.setup(OutOfBounds.java:21) Arrays: Hinweise • Leere Elemente haben den Wert null • array.length ergibt die Anzahl der Elemente • Das erste Element hat den Index 0! • Das letzte Element hat den Index arr.length-1! • Es gibt Arrays für jeden Datentyp, also auch eigene Klassen oder ein Array von Arrays • Arrays gibt es in JAVA nur noch aus historischen Gründen, eigentlich sollte man sauberere Datenstrukturen vorziehen – z.B. ArrayList ... ArrayList erstellen ArrayList<Integer> al = new ArrayList<Integer>(4); //erstellt ArrayList für Integers, Grösse 4, noch leer al.add(0, 2); //Elemente einfüllen, hier 2 an die erste Stelle al.add(17); //Elemente hinten anfügen (Grösse variabel!) ... „Befüllen“ der ArrayList mit einer Schleife : for (int i = 0; i < al.size(); i++ ) { al.add(i,(int) Math.floor(Math.random()*10)); } // gefüllt mit Zufallszahlen zwischen 0 und 9 ArrayLists: Hinweise • ArrayLists können ihre Grösse ändern • al.size() ergibt die Anzahl der Elemente • Das erste Element hat den Index 0! • Das letzte Element hat den Index al.size()-1! • Es gibt ArrayLists für jeden Datentyp, den man generisch festlegen kann, d.h. mit <typ> • Für einfache Datentypen Wrapper-Klassen benutzen. z.B. Integer für int • Es gibt in JAVA noch viele weitere Datenstrukturen. Java verwendet den Oberbegriff Collections, mit den Familien: Lists, Sets, Maps und Queues Umwandlungen String[] array = new String[] {"Affe", "Pferd", "Elefant"}; // erzeugen einer ArrayList mit den Elementen des Arrays: ArrayList<String> tiere = new ArrayList<String>(array); // Wichtig: die Daten des Array wurden einfach kopiert, tiere.add("Kuh"); // ändert nur die tiere, nicht array // erzeugen eines Array aus den Elementen der ArrayList: // Array mit der korrekten Anzahl Elemente anlegen String[] neuesArray = new String[tiere.size()]; // Daten aus der ArrayList in Array kopieren neuesArray = tiere.toArray(neuesArray); Array: typ[] name = {Werte}; Regal mit gleichartigen Kisten: name[0] Inhalt der ersten Kiste Beispiel: int[] arr = {3, 5, 0, 17}; // leeres Array: int[] arr = new int[4]; System.out.println(arr[3]); // 17 arr[1] = 11; // an 2. Stelle 11 statt 5 int x = arr[0]; // x ist 3 int l = arr.length; // l ist 4