40
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften, Zugriffsrechte und Collections Prof. Dr. Max Mühlhäuser Dr. Guido Rößling

Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Embed Size (px)

Citation preview

Page 1: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Telecooperation/RBG

Technische Universität Darmstadt

Copyrighted material; for TUD student use only

Grundlagen der Informatik 1

Thema 15: Klasseneigenschaften, Zugriffsrechte und Collections

Prof. Dr. Max MühlhäuserDr. Guido Rößling

Page 2: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Inhaltsverzeichnis

• Klasseneigenschaften

• Zugriffsrechte

• Collections (Wrapper und Collection-Typen)

2

Page 3: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Klasseneigenschaften

• Manche Eigenschaften sollten von allen Instanzen einer Klasse geteilt werden: – Zähler, wie viele Instanzen einer Klasse

erzeugt wurden.– Einzigartige Identifikationen einer Instanz

(z.B. Kundennummer)– Konstanten, notwendig für alle Objekte

• Klassenvariablen und Klassenmethoden sind Merkmale, die mit der Klasse selbst (und nicht den Objekten) verbunden sind.

3

Page 4: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Klasseneigenschaften

• Klasseneigenschaften werden mit dem Schlüsselwort static definiert

• Zugriff mit <Class>.<Identifier>– In der Klasse kann man den Klassennamen weg

lassen• Es kann von überall darauf zugegriffen werden, wo

die Klasse sichtbar ist.• Bekannte Beispiele

– Klassenattribut: System.out– Klassenmethode: public static void main(...)

4

Page 5: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Klasseneigenschaften

5

class Person {

static int personCount = 0;

Person( .. ) {

personCount++;

// ...

}

// ...

Initialisierung erfolgt vor dem Ausführen einer Methode

Initialisierung erfolgt vor dem Ausführen einer Methode

static Variable existiert einmal für alle Objekte

static Variable existiert einmal für alle Objekte

Bei der Erzeugung einer neuen Person wird der Zähler aktualisiert

Bei der Erzeugung einer neuen Person wird der Zähler aktualisiert

Page 6: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Klasseneigenschaften

// class Person (fortgesetzt)

// ...

static int personCount() {

return personCount;

}

// ...

6

Abfrage der Anzahl der existierenden PersonenAbfrage der Anzahl der existierenden Personen

Page 7: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

• Zugriff über den Klassennamen int count = Person.personCount(); System.out.println(count +" objects");

• Andere typische Nutzung

boolean largerThan(Circle b ) {.. }

static boolean largerThan(Circle a, Circle b) {..}

Klasseneigenschaften

7

Vergleicht zwei Circle-ObjekteVergleicht zwei Circle-Objekte

Empfänger wird mit einem anderen Objekt verglichen

Empfänger wird mit einem anderen Objekt verglichen

Page 8: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Klasseneigenschaften

Klassenmethoden können nicht

auf Instanz-Merkmale zugreifen.

8

class Mistake {

int i;

public static void main(String[] args) {

something(i);

// ... }

} Nur möglich, wenn ein Objekt erzeugt wurde oder „i“ eine Klassenvariable ist.

Nur möglich, wenn ein Objekt erzeugt wurde oder „i“ eine Klassenvariable ist.

Page 9: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Klasseneigenschaften

Statische Intialisierung<Static-Initializer> ::= static { <Statements> }

• Ziel: Initialisierung von Klassenattributen• Analog zu Konstruktoren für Objekte• Sinnvoll, wenn eine einfache Initialisierung

nicht ausreicht

9

Page 10: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Klasseneigenschaften

Ausführung beim Laden der Klassendefinition

10

public class InitializationExample { private static double[] vector

= new double[6]; // static initialization block static { for (int i = 0; i < vector.length; i++) { vector[i] = 1.0/(i + 1); } } // ...}

public class InitializationExample { private static double[] vector

= new double[6]; // static initialization block static { for (int i = 0; i < vector.length; i++) { vector[i] = 1.0/(i + 1); } } // ...}

Statische Intialisierung

Page 11: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Konstanten

• Können nur einmal einen Wert zugewiesen bekommen – Danach nur Lesezugriff => unveränderlich

• Konstanten werden wie Variablen deklariert, aber es wird das Schlüsselwort final verwendet– private final int MAXIMUM_NUMBER_CARDS = 5;

– Eine Konstante muss immer initialisiert werden– Konvention: mit Großbuchstaben benennen

(mehrere Wörter mit Unterstrichen trennen)

11

Page 12: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Inhaltsverzeichnis

• Klasseneigenschaften

• Zugriffsrechte

• Collection (Wrapper und Collection-Typen)

12

Page 13: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Zugriffsrechte

• Elemente einer Klasse werden mit ihrer Sichtbarkeit deklariert– <Modifier> ::= private | ε | protected | public

– Mit Hilfe des Sichtbarkeits-Modifier wird festgelegt, welche Kunden welche Attribute / Methoden / Klassen nutzen dürfen.

• Vier Ebenen der Sichtbarkeit– Versteckte Elemente (private)– Package Elemente (kein

Modifier)– Interne Elemente (protected)– Elemente mit freiem Zugriff (public)

13

Page 14: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Zugriffsrechte

private• Zugriff nur aus der Klasse selbst erlaubt

package (implizit; kein Modifier angegeben)

• Das Klassenelement ist sichtbar für alle Klassen im gleichen Package

• Kein Zugriff aus anderen Packages zulässig– Nicht einmal von Erben aus anderen Packages!

Package als Sammlung von Klassen, die einander „vertrauen“, haben einen hohen Zusammenhalt

14

Page 15: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Zugriffsrechte

protected• Alle Klassen des gleichen Packages dürfen auf das

Element zugreifen, allerdings auch alle Erben dieser Klassen (auch aus einem anderen Package)

Erben als „vertrauenswürdige“ Kunden haben das Recht, die Implementierung der Superklasse zu sehen.

15

public• Jede Klasse darf auf das Element zugreifen

Page 16: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Zugriffsrechte

16

Gleiche Klasse

public

protected

package

private

in anderen Packages

Erben in anderen Package

s

gleiches Package

Erben im gleichen Package

Überblick

Haben die gleichen Zugriffsrechte

Page 17: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Zugriffsrechte

17

package A;public class AA {

public int one;protected int two;void three() { …

}private void four() { …

}}

package A;public class AA {

public int one;protected int two;void three() { …

}private void four() { …

}}

package B;class BA extends AA {

// one, two}

package B;class BA extends AA {

// one, two}

package A;class AB {

// one, two, three}

package A;class AB {

// one, two, three}

package B;class BB {

// one}

package B;class BB {

// one}

package A;class AC extends AA {

// one, two, three}

package A;class AC extends AA {

// one, two, three}

Page 18: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Zugriffsrechte

Klassen-Modifier• Entweder public

– Weltweite Einzigartigkeit– Nur eine Klasse pro Datei kann public sein– Datei muss den Namen „Klassenname.java“ haben

• oder implizit– Nur sichtbar im gleichen Package

18

Page 19: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Zugriffsrechte

Modifier und Redefinition• Wenn eine Methode erneut definiert wird,

kann die Sichtbarkeit nur erweitert werden.• Grund: Substituierbarkeit

– Es muss möglich sein, ein Objekt eines spezifischeren Typs mit einem generelleren Objekt zu ersetzen

– Die Subklasse muss wenigstens so viele Merkmale anbieten wie die Superklasse.

Sie darf keine erneut definierten Merkmale vor Klienten verstecken

19

Page 20: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Zugriffsrechte

Sichtbarkeit in UML • public +• protected #• private -• Kein Modifier Sichtbarkeit ist undefiniert

20

Class

-privateAttribute : AnotherClass

#protectedAttribute : int

+publicMethod(x: int) : boolean

Page 21: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Inhaltsverzeichnis

• Klasseneigenschaften

• Zugriffsrechte

• Collection (Wrapper und Collection-Typen)

21

Page 22: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Collection Typen

• Eine häufig benötigte Form von Datenstrukturen ist eine Collection (Sammlung), die unterschiedliche Datenelemente speichert.– entweder genau der gleiche Typ– oder der gleiche Typ (mit Subtypen)– oder gemischte Typen

• Abhängig vom geplanten Gebrauch kann eine Collection…– Schnellen Zugriff auf die einzelnen Elemente

unterstützen.– Die Sortierung der Elemente unterstützen.– Die Möglichkeit zum Zugriff auf bestimmte Elemente

geben.– Bei Bedarf wachsen.– usw. 22

Page 23: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Wrapper-Klassen

• Primitive Datentypen sind keine Referenztypen Sie werden nicht von Object abgeleitet und besitzen

keine Methoden.

Sie können Variablen vom Typ Object nicht zugewiesen werden.

• Manchmal ist es sinnvoll (z.B. für Collections), primitive Datentypen so zu behandeln, als wären sie Objekte Wrapper-Klassen

23

Werte und Referenzen

Page 24: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Wrapper-Klassen

• Der Name der Klasse ist vom primitiven Datentyp abgeleitet, Großbuchstabe am Anfang– java.lang.Byte, java.lang.Short,

java.lang.Integer, java.lang.Long,

java.lang.Float, java.lang.Double,

java.lang.Character

• Wrapper-Objekte sind unveränderlich– Wertzuweisung über den Konstruktor

– Wertabfrage über die Methode <primitiveType>Value()

24

Page 25: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Autoboxing - Autounboxing

• Seit Java 1.5+ gibt es eine implizite Umwandlung von int nach Integer (andere Typen analog)

// AUTOBOXINGInteger integer = 5;

// AUTO-UNBOXINGint i = integer;

25

Integer integer = new Integer(5);

int i = integer.intValue();

Page 26: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Collections

Java bietet eine Menge unterschiedlicher Collections (Sammlungen) an(implementieren das java.util.Collection Interface, oder eines derfolgenden Subinterfaces (nicht vollständig!)):• Collection

– Ein allgemeines Interface für das Sammeln von Objekten– Keine Restriktionen / Garantien bezüglich Duplikate / Ordnung /

Sortierung, usw.• List (hat die Implementierungen ArrayList,

LinkedList,Vector,…)– Objekte sind sortiert– Kann Duplikate enthalten– Direkter Zugriff auf Objekte über Index

• Set (hat die Implementierung HashSet)– Objekt kann nur einmal enthalten sein

• SortedSet (hat die Implementierung TreeSet)– als Set, aber geordnet, Nutzer kann

eine spezifische Vergleichsstrategie festlegen 26

Collection

Collection

SortedSet

SortedSet

SetSetListList

Page 27: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Collections: Listen

• Im folgenden wird von Collections vom Typ „E“ (für Element) ausgegangen; dieser Typ ist durch „passende“ Typen ersetzbar.– Details folgen im Foliensatz zu Generischen Datentypen

• Das Interface java.util.List bietet folgende Methoden:– boolean add(E e)

• Anhängen des Elements e an die Liste– void add(int pos, E e)

• Einfügen des Elements e an Position pos; verschiebt alle Elemente ab Position pos um eine Position nach hinten

– boolean addAll(Collection c)• Anhängen aller Elemente der Collection c an die Liste

– boolean addAll(int pos, Collection c)• Einfügen aller Elemente der Collection c an Position pos

(s.o.)27

Page 28: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Collections: Listen

• void clear()– Löscht alle Elemente der Liste

• boolean contains(Object o)– Liefert true, wenn sich Objekt o in der Liste befindet

• boolean containsAll(Collection c)– Liefert true, wenn alle Objekte der Collection c in der

Liste sind• E get(int pos)

– Liefert das Element an Position pos der Liste• int indexOf(Object o)

– Liefert die erste Position, an der sich o in der Liste befindet, sonst -1. Gegenstück: int lastIndexOf(Object o)

• boolean isEmpty()– Liefert true wenn die Liste leer ist

28

Page 29: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Collections: Listen

• E remove(int pos)– Entfernt das Objekt an Position pos und liefert es zurück

• boolean remove(Object O)– Versucht Objekt o aus der Liste zu entfernen; true bei

Erfolg• int size()

– Liefert die Größe der Liste• Object[] toArray()

– Liefert ein Array, das alle Elemente der Liste umfasst• Konstruktoren in den Erbenklassen:

– Parameterlos– Mit Collection als Parameter – kopiert alle Werte in die

Liste– Spezialfälle (siehe bei Untertyp)

29

Page 30: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Collections: Implementierungen von List

• java.util.LinkedList– Fügt folgende Methoden hinzu (Auswahl):

• void addFirst(E)• void addLast(E)• E getFirst()• E getLast()

• java.util.ArrayList– Elemente werden in einem Array gespeichert– Neue Methoden (Auswahl):

• void ensureCapacity(int minCapacity) – falls die Liste weniger Elemente als minCapacity fassen kann, wird das Array vergrößert

• void trimToSize() – verkleinert das Array auf die Listengröße

– Neuer Konstruktor: ArrayList(int initialCapacity) für Größe30

Page 31: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Collections: Implementierung von List

• java.util.Vector:– Prinzipiell identisch zu java.util.ArrayList ( arraybasiert)– Zugriffe erfolgen synchronisiert

• Vermeidet Probleme, wenn zwei Objekte gleichzeitig schreibend oder schreibend/lesend zugreifen wollen

– „Standardklasse“ für viele Anwendungen– Konstruktoren:

• Vector() – legt einen Vector mit vordefinierter Größe an• Vector(int c) – legt Vector mit Größe c an• Vector(int c, int inc) – legt Vector mit Größe c an; wenn diese

nicht langt, werden immer „inc“ Elemente hinzugenommen• Der letzte Konstruktor ist zu bevorzugen

– Man sollte vorher bestimmen, mit wievielen Daten man rechnet!

31

Page 32: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Collections: Set

• Ein Set repräsentiert eine mathematische Menge– Daher ist ein gegebenes Objekt nur maximal einmal

vorhanden• Umfasst die meisten der schon bekannten

Methoden– boolean add(E e)– boolean addAll(Collection c)– void clear()– boolean contains(Object O)– boolean containsAll(Collection c)– boolean isEmpty()– boolean remove(Object O)– boolean removeAll(Collection c)– int size()– Object[] toArray()

• Einfügen scheitert, wenn das Objekt schon vorhanden ist

32

Page 33: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Collections: Set

• Konkrete Instanzen von Set:– java.util.HashSet: verwaltet die Daten in einer

Hashtabelle (sehr effizienter Zugriff)– java.util.TreeSet: verwaltet die Daten in einem Baum mit

Zugriffszeiten in O(log n).• Es gibt weitere spezialisierte Implementierungen

– Bitte schauen Sie selbst in die JDK API Documentation!

33

Page 34: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Interface: Map

• Manchmal sollen Objekte nicht über einen numerischen Index, sondern über einen Schlüssel (einzigartiger, aber sonst zufälliger Wert) auffindbar sein, z.B. eine Telefonnummer mit „Nachname + Vorname“

• Unterstützt durch das Interface java.util.Map• … und der abgeleiteten Schnittstelle SortedMap

34

MapMap

SortedMapSortedMap

Page 35: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Klasse: java.util.HashMap

• Implementiert das Interface java.util.Map.• Erlaubt Zugriff auf Elemente durch einen

berechneten Schlüssel, z.B. „Nachname + Vorname“

• Schlüssel wird in numerischen Index (Hashwert) konvertiert und für effizienten Zugriff genutzt– sehr effizienter Zugriff– Hashing-Theorie im nächsten Semester

• Nützliche Konstruktoren– HashMap()

Standard-Konstruktor– HashMap(int size)

legt eine neue HashMap der Größe size an– HashMap(Map t)

legt eine HashMap an, die alle Elemente in der Map enthält, die mit „t“ referenziert werden.

35

Page 36: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Klasse: java.util.HashMap

• Nützliche Methoden…

– Object put(Object key, Object value)speichert "value" zum Auffinden mit

"key"– Object get(Object key)

findet das Objekt gespeichert unter "key"– boolean containsKey(Object key)

beantwortet, ob ein Objekt unter "key" liegt

– boolean containsValue(Object value) beantwortet, ob "value" in der HashMap ist

– Object remove(Object key)löscht "key" und die assoziierten Objekte

36

Page 37: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Iteratoren

• Java nutzt einen Iterator, um über Elemente in einer Collection zu laufen („zu iterieren“)

• Normalerweise erhält man den Iterator durch den Aufruf von iterator() auf der Collection– Das gilt für alle Subklassen des Collection Interface– Für eine Hashtable nutzt man keys() und darauf iterator()

• iterator() liefert eine Instanz von java.util.Iterator

37

Page 38: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Iteratoren

Ein Iterator bietet nur drei Operationen:• boolean hasNext() – gibt es noch weitere Elemente?

• Object next() – liefert das nächste Element, falls eines existiert– Sonst wird eine NoSuchElementException geworfen (siehe

T18)– Prüfen Sie vorher die Existenz mit hasNext()!

• void remove() – entfernt das zuletzt gelieferte Element– Wird nicht von allen Typen unterstützt– In dem Fall wird eine UnsupportedOperationException

ausgelöst38

Page 39: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Iteratoren

• Ein Einsatz von Iteratoren sieht wie folgt aus:

• Dazu gibt es eine spezielle Variante der for-Schleife:

• Diese Schleife nutzt den Iterator für next()– Der Wert wird dann in jeder Iteration an o zugewiesen

• Nutzbar für iterierbare Elemente – Collections, Arrays 39

List intList = Arrays.asList(1, 2, 3); // Liste anlegenint s = 0; for (Iterator it = intList.iterator(); // Iterator holen it.hasNext(); ) // weiter, solange Elemente da s += (Integer)it.next(); // Element zur Summe addieren

for (Object o : intList) // Iterator holen // weiter, solange Element da s += (Integer)o; // Element zur Summe addieren

Page 40: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 15: Klasseneigenschaften,

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T15

Collection Framework

• Auf Grund des Umfangs dieses Themas und der kurzen Zeit haben wir die Collections kaum abgedeckt

• Mehr über Collections unterhttp://java.sun.com/docs/books/tutorial/collections/index.html

• Mehrere spezielle Klassen sind verfügbar

• Bevor Sie selbst einen Typ implementieren, prüfen Sie http://java.sun.com/javase/6/docs/technotes/guides/collections/index.html

40