Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Seite 1 Java: Dynamische Datentypen Richard Göbel.

Ähnliche Präsentationen


Präsentation zum Thema: "Seite 1 Java: Dynamische Datentypen Richard Göbel."—  Präsentation transkript:

1 Seite 1 Java: Dynamische Datentypen Richard Göbel

2 Seite 2 Dynamische Datentypen - Inhalt Referenzen Zeichenketten Mengen und Listen Maps

3 Seite 3 Referenzen - Konzept Alle Variablen und Argumente für intrinsische Datentypen enthalten direkt einen Wert. Alle Variablen und Argumente für Objekte enthalten eine Referenz. Operationen auf Objekten: Zuweisungen erzeugen nur eine Kopie der Referenz und keine Kopie des Objekts. Vergleichsoperationen vergleichen in der Regel nur die Referenzen und nicht die Objekte. int x = 17; 17 x: Student s = new Student(); x: Student name: Meier alter: 19

4 Seite 4 Referenzen - Beispiel public class C { int v; } public class T { static void RefFunc (C c) { c.v = 2; } static void ValFunc (int v) { v = 2; }... int v1; C v2 = new C(); v1 = 1; T.ValFunc(v1); System.out.println(v1); v2.v = 1; T.RefFunc(v2); System.out.println(v2.v);... liefert den Wert 1 liefert den Wert 2

5 Seite 5 Referenzen - Eigenschaften dieses Konzepts Java stellt sicher, dass jede Referenz nur auf eine Instanz der zugehörigen Klasse verweist: Der Compiler überprüft das Programm auf falsche Zuweisungen und Aufrufe. Cast-Operatoren überprüfen während der Laufzeit den Typ der zugehörigen Objekte. Der benötigte Speicherplatz für alle referenzierten Objekte wird automatisch belegt und wieder freigegeben. Fehler des Programmierers bei der Speicherverwaltung sind damit ausgeschlossen!

6 Seite 6 Zeichenketten - Basisoperationen Erzeugen von Zeichenketten: String s = Test; String t = new String(Test2); Vergleich von Zeichenketten: s.equals(t); Zugriff auf Zeichenketten einzelnes Zeichen: s.charAt(2)// s Teilzeichenkette: s.subString(1,3)// es Weitere Operationen Zusammenhängen: s + t // TestTest2 Länge der Zeichenkette: s.length()// 4

7 Seite 7 Zeichenketten - Eigenschaften von Operationen Operationen auf Zeichenketten ändern die Ausgangswerte nicht. Bei einigen Operationen auf Zeichenketten werden Teile der Ausgangswerte oder sogar vollständige Ausgangswerte kopiert. In einigen Situationen kann die Laufzeit eines Java-Programms durch häufiges Benutzen von Operationen auf Zeichenketten und dem damit verbundenen Kopieraufwand erheblich verlängert werden. while (... ) { c = str.read(); s = s + c; }

8 Seite 8 Zeichenketten - Effiziente Datenstruktur StringBuffer char c; StringBuffer sb; String s; sb=new StringBuffer(1000); while (... ) {... c = str.read(); sb = sb.append(c)l;... } s = new String(sb); Erzeugen eines Stringbuffer mit initialer Größe. Anhängen von Zeichenketten an den aktuellen Wert mit der Methode append. Konvertieren des endgültigen Werts mit dem Konstruktur String in ein Objekt vom Typ String.

9 Seite 9 Zeichenkette - Methode toString public class Person { String name; int alter;... public String toString() { return Person: + name +, + alter; } Mit der Methode toString wird eine Zeichenkette für ein Objekt erzeugt. Die Funktion toString wird von verschiedenen anderen Funktionen in Java automatisch aufgerufen, z.B.: println für die Ausgabe von Objekten append für das Anhängen eines Objekts an eine Zeichenkette Für eigene Klassen sollte jeweils eine eigene Methode toString definiert werden.

10 Seite 10 Übung 4.1

11 Seite 11 Mengen und Listen - Eigenschaften Eine Liste enthält eine praktisch beliebig große Anzahl von Objekten. Ein Objekt darf mehrfach in einer Liste enthalten sein. Jedes Objekt hat eine Position und kann mit Hilfe dieser Position gelesen oder geändert werden. Alternativen für eine Implementierung: schneller Zugriff auf eine Position? oder effiziente Verlängerung der Liste? Eine Menge enthält eine praktisch beliebig große Anzahl von Objekten. Ein Objekt darf nur einmal in einer Menge enthalten sein. Objekte haben keine Position. Alternativen für eine Implementierung: Vermeidung von Duplikaten Ein Array enthält eine feste Anzahl von Objekten!

12 Seite 12 Mengen und Listen - Basisoperationen Objekt o einfügen: coll.add(o); Objekt o löschen: coll.remove(o); Alle Objekte löschen: coll.clear(); Objekt o enthalten? coll.contains(o); Anzahl der Objekte: coll.size(); Die Methoden remove und contains vergleichen die Objekte mit der Methode equals.

13 Seite 13 Mengen und Listen - Spezielle Operationen für Listen Objekt o an Position i einfügen: list.add(i,o); Objekt an Position i löschen: list.remove(i); Objekt an Position i : list.get(i); Objekt an Position i durch o ersetzen: list.set(i,o); Teilliste von Position i bis j-1 : list.sublist(i,j);

14 Seite 14 Listen und Mengen - Alternative Implementierungen Liste auf Array-Basis: ArrayList l = new ArrayList(100); Verkettete Liste LinkedList l = new LinkedList(); Vektor: Vector v = new Vector(); Menge (Baumstruktur): TreeSet s = new TreeSet(); Menge (Hashfunktion): HashSet s = new HashSet(200);

15 Seite 15 Listen und Mengen - Beispiel: Menge aller Vorlesungen import java.util.*; public class Vorlesung { public static HashSet alle = new HashSet(100); public String name;... public Vorlesung(String na) { name = na; alle.add(this); } Referenz auf aktuelles Objekt Import-Anweisung für Package io

16 Seite 16 Listen und Mengen - Beispiel: Funktion equals für Vorlesung public class Vorlesung { public String name;... public boolean equals (Object o) { if (o != null && o.getClass().equals(this.getClass())) { return o.name == this.name;} else { return false;}}... }

17 Seite 17 Listen und Mengen - Iteratoren Vorlesung v; Iterator it; it = Vorlesung.alle.iterator(); while (it.hasNext()) { v = (Vorlesung) it.next(); v.stunden = 4; } Mit einem Iterator lassen sich schrittweise alle Elemente einer Liste oder eine Menge bearbeiten. Die Methode iterator() liefert ein Objekt der Klasse Iterator für eine Liste oder Menge. Mit der Methode hasNext() wird überprüft, ob es noch weitere Elemente in dem Iterator gibt. Die Methode next() liefert das nächste Element eines Iterators.

18 Seite 18 Maps - Konzept Mit einer Map lassen sich Objekte nicht nur über Zahlen, sondern auch über beliebige Objekte indizieren. Es existieren zwei unterschiedliche Implementierungen von Maps: TreeMap HashMap Basisoperatoren: put(key,value), get(key) Vorlesung 1 Dozent 1 Vorlesung 2 Dozent 2 Vorlesung n Dozent n SchlüsselWert

19 Seite 19 Übung 4.2


Herunterladen ppt "Seite 1 Java: Dynamische Datentypen Richard Göbel."

Ähnliche Präsentationen


Google-Anzeigen