Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Java: Dynamische Datentypen

Ähnliche Präsentationen


Präsentation zum Thema: "Java: Dynamische Datentypen"—  Präsentation transkript:

1 Java: Dynamische Datentypen
Richard Göbel Seite 1

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

3 Student s = new Student();
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; x: 17 Student s = new Student(); x: Student name: “Meier“ alter: 19 Seite 3

4 Referenzen - Beispiel liefert den Wert 1 . . . int v1; C v2 = new C();
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 2 Seite 4

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! Seite 5

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 Seite 6

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; } Seite 7

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. Seite 8

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. Seite 9

10 Übung 4.1 Seite 10

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! Seite 11

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. Seite 12

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); Seite 13

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); Seite 14

15 Listen und Mengen - Beispiel: Menge aller Vorlesungen
Import-Anweisung für Package ‚io‘ 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 Seite 15

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;}} } Seite 16

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. Seite 17

18 Maps - Konzept Schlüssel Wert
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) Vorlesung1 Dozent1 Vorlesung2 Dozent2 Vorlesungn Dozentn Seite 18

19 Übung 4.2 Seite 19


Herunterladen ppt "Java: Dynamische Datentypen"

Ähnliche Präsentationen


Google-Anzeigen