Arrays Flashcards
Arrays
° Sammlung gleichartiger Elemente
° Zugriff erfolgt über einen Index
° Listen mit fester Größe
° Abstrahieren von einem zusammenhägenden Speicherbereich mit indiziertem Zugriff auf die Speicherzellen
Arrays für Bilddaten
° Bilder sind zweidimensionale Strukturen einzelner Bildpunkte
° Bildgröße (Zeilen und Spalten) ist statisch
° Informationen über Bildpunkte müssen für Bildverarbeitung schnell zugreifbar sein
Arrays in Java
° geordnete Reihung gleichartiger Elemente
° Elementtypen können Basistypen oder Referenztypen sein (auch Referenzen auf andere Arrays)
° Die Länge eines Array wird erst beim Erzeugen festgelegt
° Jeder Zugrigg über den Index wird automatisch geprüft
Arrays Objekte
° Array in Java immer eine Objekt (Arrays haben alle Eigenschaften, die in der Klasse Object definiert sind)
° Array-Variable ist immer eine Referenzvariable ( Typ ist Array von Elementtyp)
° Deklaration eines Array von integer-Werten:
int[] intArray;
-> Länge/Größe des Arrays wird in Deklaration nicht angegeben
Array Deklaration
° Type [] Identifier
° // Array-Variable mit primitivem Elementtyp (Array von int)
int[] numbers;
° // Array-Variable mit einem Objekttyp als Elementtyp (Array von Person)
Person[] people;
Array Erzeugung
° Array-Objekte müssen explizit erzeugt werden ( wie alle Objekte mit new)
new Type [ LengthExpression]
° Länge wird definiert oder berechnet und bleibt unverändert
intArray = new int [8];
° Deklaration und Erzeugung können zusammengefasst werden:
int[] intArray = new int [8];
° // Erzeugung eines Arrays mit primitivem Elementtyp
new int[10]
° // Erzeugung eines Arrays mit einem Objekttyp als Elementtyp
new Person[x]
Initialisieren von Array-Zellen
° Bei Array- Erzeugungen erhalten die Zellen eines Arrays in Java die Default-Werte des Elementtyps
° Neben der normalen Zuweisung von Werten kann ein Array auch implizit erzeugt und direkt initialisiert werden
° implizite Erzeugung und Initialisierung mit geschweiften Klammern ist ausschließlich bei der Deklaration erlaubt!
int[] intArray = {1,2,3,4,5,6,7,8};
Indizierung bei Arrays
° beginnend bei 0
° Gültiges Indiz: ganzzahlig von 0 bis length -1
° Beispiel: Array mit Größe 8 hat gültiges Indiz von 0…7
Schreibender und lesender Zugriff auf Array-Zellen
° Auf die Array-Zellen wird mit eckigen Klammern [] zugegriffen:
float element = temperatures [0]; // lesender Zugriff temperatures[3] = 21.2f; //schreibender Zugriff temperatures[0] = temperatures [1]; //lesender Zugriff
° Array-Zellen speichern Werte oder Referenzen auf Objekte genau wie andere Variablen auch
Typische Fehler
° Array der Größe
- System.out.println(temperatures[8]);
- > Fehlermeldung: ArrayIndexOutOfBoundsException: 8
° Array als Exemplarvariable deklariert: private int[] _numbers;
° Im Konstruktor als erstes: _numbers[0] = 42;
-> Fehlermeldung: NullPointerException
-> Erzeugung des Arrays fehlt: _numbers = new int [8];
° Array mit Objekttyp als Elementtyp deklariert und initialisiert:
- Konto[] konten = new Konto [4];
° direkt danach:
- konten[0].einzahlen(123);
-> Fehlermeldung: NullPointerException
° Erzeugung der Elemente des Arrays fehlt
For-Schleifen und Arrays
° Einsetzung von For-Schleifen, um alle Elemente eines Arrays zu bearbeiten
° die öffentliche Exemplarkonstante length wird dabei benutzt
° Standardbenutzung einer For-Schleife für Arrays wird als Programmiermuster bezeichnet
public void printArray(int[] intArray) { for (int i = 0; i < intArray.length; ++i) { System.out.println(intArray[i]); } }
Erweiterte For-Schleife für Arrays
° erspart den Zugriff auf length
° ist nicht geeignet, wenn an der Belegung der Zellen etwas geändert werden soll. Im Schleifenrumpf steht kein Schleifenindex zur Verfügung.
public void printArray(int[] intArray) { for (int k: intArray) { System.out.println(k); } }
Zuweisungen mit Arrays
° Zuweisung einer Array-Variable kopiert nur eine Referenz!
int[] intArray1 = {1, 2, 3};
int[] intArray2 = intArray1;
° Beide Referenzen verweisen nun auf dasselbe Array-Objekt
° Für eine Kopie des Array-Objektes gibt es zwei Möglichkeiten:
- Elementenweise in ein neues Array-Objekt kopieren
- Methode clone verwenden
Kopieren von Array-Objekten
° Neues Array-Objekt selbst erzeugen und elementweise kopieren:
int[] intArray1 = {1, 2, 3};
int[] intArray2 = new int [intArray1.length];
for (int i = 0; i< intArray1.length; ++i)
{
intArray2[i] = intArray1[i];
}
° mit der Methode clone:
int[] intArray1 = {1, 2, 3};
int[] intArray2 = intArray1.clone();
Zweidimensionale Arrays
° Zweidimensionale Arrays in Java sind Arrays von eindimensionale Arrays
° a [3][1]
- a eine Referenz auf ein Array von Zeilen
- Der erste Index benennt die Zeile, der zweite de Spalte