Das Collection-Framework von JAVA - PowerPoint PPT Presentation

1 / 38
About This Presentation
Title:

Das Collection-Framework von JAVA

Description:

Das Collection-Framework von JAVA ... – PowerPoint PPT presentation

Number of Views:193
Avg rating:3.0/5.0
Slides: 39
Provided by: Gerha90
Category:
Tags: java | collection | das | framework | java | von

less

Transcript and Presenter's Notes

Title: Das Collection-Framework von JAVA


1
Das Collection-Framework von JAVA
2
Aufgaben des Collection-Frameworks
  • Das Collection-Framework stellt Klassen und
    Interface zur Verfügung, mit deren Hilfe komplexe
    Datenstrukturen verwaltet werden können. Z.B.
  • Listen (Duplikate möglich)
  • Mengen (keine Duplikate)
  • Bäume (nach einem Kriterium sortiert)
  • Dabei wird streng unterschieden zwischen den
    Schnittstellen zum Zugriff auf die Daten (in
    Interfacen definiert) und den Methode der
    Datenspeicherung (in Klassen die die Interface
    implementieren).? Auf unterschiedlich
    gespeicherte Daten kann in sehr ähnlicher Weise
    zugegriffen werden. Vorteile
  • Die Datenspeicherungsart kann so gewählt werden,
    dass die Arbeit möglichst effektiv realisiert
    werden kann.
  • Die Datenspeicherungsart kann leicht geändert
    werden.
  • Das Collection-Framework kann sowohl durch neue
    Speichermethoden als auch durch neue
    Zugriffsmethoden erweitert werden.

3
Struktur des Collection-Frameworks
HashSet
TreeSet
ArrayList
LinkedList
LinkedHashSet
Vector
4
Interface des Collection-Framworks
  • Basis-Interface ist das Interface Collection
  • Von Collection sind alle anderen Interface
    abgeleitet.
  • Keine Klasse implementiert direkt das Interface
    Collection. Nur die abgeleiteten Interface werden
    implementiert.
  • In Collection sind Methoden definiert, die in
    allen Implementierungen vorhanden sein müssen.
  • Spezifische Methoden (z.B. sortieren) sind in
    abgeleiteten Interfacen (z.B. SortedSet)
    definiert.
  • Eine Collection repräsentiert eine beliebige
    Gruppe von Objekten. Das Interface wird
    üblicherweise nicht implementiert, sondern nur
    die daraus abgeleiteten Interface.
  • Jede Implementierung sollte mindestens zwei
    Konstruktoren implementieren. Einen ohne
    Parametere, der eine leere Collection erzeugt und
    einen mit eine beliebigen Collection als
    Parameter. Damit kann eine beliebige andere
    umgewandelt werden.

5
Methoden des Interfaces Collection
  • public boolean add/remove/contains(Object o)Hinzu
    fügen/Löschen/Existenztest eines Objektes
  • public boolean addAll/removeAll/containsAll(Collec
    tion c)Hinzufügen/Löschen/Existenztest aller
    Element der Collection c
  • public boolean retainAll(Collection c)Löschen
    aller Elemente, außer der die in c enthalten sind
  • public void clear()leert die Collection
  • public boolean isEmpty()prüft, ob die Liste leer
    ist
  • public int size()gibt die Anzahl der Elemente
    der Collection aus
  • public Iterator iterator()gibt einen Iterator
    aus, mit dem man alle Objekte der Collection
    erreichen kann

6
  • public Object toArray()gibt alle Elemente der
    Collection in ein Feld aus
  • public Object toArray(Object a)das
    Ergebnis-Array hat den selben Typ wie a. Es
    werden nur die Elemente der Collection
    ausgegeben, die zu diesem Typ passen. Passen alle
    derartigen Elemente in das Feld a werden sie
    darin gespeichert, sonst wird ein neues Feld
    angelegt und diese ausgegeben.
  • addXXX, removeXXX, retainAll ergeben als Wert
    true, wenn die Collection durch die Operation
    verändert wurde, sonst false.
  • Die Methoden add, addAll, clear, remove,
    removeAll und retainAll müssen nicht
    implementiert werden. Sie werfen dann die
    Ausnahme UnsupportedOperationException.

7
Die Klasse AbstractCollection
  • Die Klasse AbstractCollection implementiert die
    meisten Methoden des Interfaces Collection auf
    eine Standardweise. Diese kann bei der Definition
    speziellerer Collections überschrieben werden.
  • Die Methoden iterator und size werden nicht
    implementiert. Die Klasse ist daher abstract.

8
Das Interface Set
  • Set ist von Collection abgeleitet.
  • Set beschreibt Mengen von Objekten, wobei keine
    Duplikate erlaubt sind.
  • Die Methoden sind identisch mit denen von
    Collection.
  • Set und Collection unterscheiden sich nur in der
    Vereinbarung, dass Set keine Duplikate enthält.

9
Die Klasse AbstractSet
  • Die Klasse AbstractSet implementiert die Methoden
    des Interfaces Set und ist abgeleitet von der
    abstrakten Klasse AbstractCollection.
  • Die Methoden iterator und size bleiben abstract,
    sodass die ganze Klasse abstract ist.

10
Die Klasse HashSet
  • Die Klasse HashSet ist von AbstractSet abgeleitet
    und implementiert die Methoden iterator und size
    auf geeignete Weise.
  • HashSet implementiert die einfachste Menge, d.h.
    es sind keine Duplikate enthalten und die
    Reihenfolge ist nicht definiert, sie kann sich
    während der Nutzung ändern.
  • Die Elemente werden in HashMaps gespeichert.
    Dadurch ist der Zugriff auf Elemente sehr schnell
    (nahezu konstant bzgl. der Anzahl der Elemente).

11
Implementation von HashSet
  • Für jedes Element der HashSet wird ein Hash-Code
    berechnet. Z.B. die Speicheradresse als
    Integer-Größe.
  • Hash-Codes identischer Objekte sind gleich.
  • Verschiedene Objekte können gleiche Hash-Codes
    besitzen.
  • Die Elemente werden in einem Feld von einfach
    verketteten Listen gespeichert.
  • Der Feldindex der Liste kann aus dem Hashcode
    direkt berechnet werden indexhashCode
    Listenanzahl
  • In den Listen wird dann sequentiell gesucht.

12
Hashcode
13
Konstruktoren
  • public HashSet()erzeugt leeren HashSet
  • public HashSet(Collection c)erzeugt HashSet der
    alle Element der Collection c enthält
  • public HashSet(int initialCapacity,
    float loadFactor)erzeugt leere HashSet mit
    Anfangskapazität und loadFactor
  • public HashSet(int initialCapacity)enspricht
    HashSet(initialCapacity, 0.75f)
  • Wenn die Anzahl der Elemente größer als
    capacityloadFactor wird eine neue HashTabelle
    aufgebaut, wobei capacity die aktuelle Kapazität
    der HashSet ist.

14
Das Interface Iterator
  • Die Methode iterator des Interfaces Collection
    gibt ein Objekt aus, das das Interface Iterator
    implementiert.
  • Das Interface Iterator wird in verschiedenen
    Klassen (z.B. HashMap) durch interne Klassen
    implementiert. Diese Implementierungen sind aber
    nicht direkt benutzbar.
  • Es sind also genau die Methoden nutzbar, die im
    Interface definiert sind.
  • Methoden
  • public boolean hasNext()stellt fest, ob der
    nächste Aufruf von next() erfolgreich sein wird
  • public Object next()gibt das nächste Element des
    Iterators aus.
  • public void remove()löscht das zuletzt mit
    next() gelesene Element des Iterators, wirkt sich
    auch auf die zugrunde liegende Collection aus.

15
Beispiel
  • Seminar mit HashSet
  • import java.util.
  • public class THashSet
  • public static void main(String args)
  • Collection seminar new HashSet()
  • System.out.println(seminar.add(new
    Student("Abu","George",1)))
  • ...
  • System.out.println(seminar.add(new
    Student("Xu","Liman",41)))
  • Student snew Student("Yildiz","Gülsüm",42)
  • System.out.println(seminar.add(s))
  • System.out.println(seminar.add(s))
  • System.out.println(seminar)
  • System.out.println("Azahl der Studenten
    "seminar.size())
  • print(seminar)
  • public static void print(Collection col)
  • Iterator it col.iterator()
  • while (it.hasNext()) System.out.println(it.next(
    ))

16
Das Interface List
  • List ist von Collection abgeleitet.
  • List beschreibt Collectionen, in denen die
    Elemente in einer definierten Reihenfolge
    gespeichert sind. Sie sind daher wie in einem
    Array über einen Index erreichbar.
  • Der erste Index ist immer 0 (wie bei Arrays).
  • Es können Duplikate in der Liste enthalten sein.
  • Der Nutzer hat volle Kontrolle über die
    Reihenfolge der Elemente.
  • Das Interface List definiert zusätzliche
    Methoden, die den geforderten Eigenschaften
    gerecht werden.

17
Neue Methoden im Interface List
  • public void add (int index, Object element)Hinzuf
    ügen eines Elements an der Position index.
  • public boolean addAll(int index,
    Collection c)Hinzufügen aller Element der
    Collection c an der Position index.
  • public void remove(int index)Löschen des
    Elements an der Position index.
  • public Object get(int index)Lesen des Elements
    an der Position index.
  • public Object set(int index, Object element)Erset
    zen des Elements an der Position index.
  • public int indexOf/lastIndexOf(Object o)Sucht
    das erste/letzte Vorkommen des Elements o in der
    Liste.

18
  • public ListIterator listIterator()Erzeugt einen
    ListIterator, der alle Elemente der Liste in der
    gegebenen Reihenfolge enthält.
  • public ListIterator listIterator(int index)Erzeug
    t einen ListIterator, der alle Elemente der Liste
    beginnend beim index in der gegebenen Reihenfolge
    enthält.
  • public List subList(int fromIndex,
    int toIndex)Erzeugt eine Teilliste mit den
    Indizes fromIndex ... (toIndex-1). Operation auf
    der Unterlistliste wirken sich auch auf die
    Originalliste aus. Z.B. löscht die
    Anweisunglist.subList(from, to).clear()einen
    ganzen Bereich der Originalliste.
  • Zusätzlich zu den optionalen Methoden des
    Interfaces Collection ist die Methode set
    optional.

19
Die Klasse AbstractList
  • AbstractList ist von der Klasse
    AbstractCollection abgeleitet und implementiert
    das Interface List
  • Alle Methoden des Interfaces List außer get und
    size werden implementiert. get und size bleiben
    abstract.
  • Zusätzlich implementierte Methodeprotected void
    removeRange(int fromIndex, int toIndex)löscht
    alle Elemente von fromIndex bis (toIndex-1)

20
Die Klasse ArrayList
  • ArrayList ist von AbstractList abgeleitet und
    implementiert die Methode size.
  • Die Klasse ArrayList stellt ein Array zur
    Verfügung, das genau so effektive Zugriffe
    erlaubt, wie das normale Array, aber automatisch
    wächst. Außerdem können Elemente eingefügt werden.

21
Implementation von ArrayList
  • Die Elemente werden in einem Object
    gespeichert.
  • Zum Kopieren des Feldes bei Änderungen wird die
    Methode System.arraycopy verwendet.

22
Konstruktoren von ArrayList
  • public ArrayList()
  • public ArrayList(Collection c)
  • public ArrayList(int initialCapacity)erzeugt
    eine ArrayList mit der Kapazität initalCapacity

23
Methoden von ArrayList
  • public void ensureCapacity(int minCapacity)erhöht
    dir Kapazität des Feldes, so dass mindestens
    minCapacity Elemente gespeichert werden können.
  • public void trimToSize()Verkleinert das Feld so,
    dass kein unnötiger Speicherplatz benötigt wir.

24
Das Interface ListIterator
  • Das Intefrace ListIterator vom Interface Iterator
    abgeleitet und dem Zugriff auf die Elemente einer
    Collection.
  • Dabei werden zusätzliche Methoden definiert, wie
    sie zum Zugriff auf Listen zweckmäßig sind.
  • Zusätzliche Methoden
  • public boolean hasPrevious()stellt fest, ob der
    nächste Aufruf von previous() erfolgreich sein
    wird
  • public Object previous()gibt das vorhergende
    Element des Iterators aus
  • public int nextIndex()bestimmt den Index des
    nächsten Listenelements
  • public int previousIndex()bestimmet den Index
    des vorhergehenden Listenelements
  • public void add(Object o)fügt ein Listenelement
    hinzu
  • public void set(Object o)ersetzt ein
    Listenelement

25
Beispiel
  • Seminar mit TreeList
  • Einzige ÄnderungCollection seminar new
    ArrayList()
  • Resultat
  • Duplikate werden gespeichert.
  • Die Daten behalten die Reihenfolge der
    Speicherung.
  • Wenn die zusätzlichen Listen-Möglichkeiten
    genutzt werden sollen muss folgende Änderung
    vorgenommen werdenList seminar new
    ArrayList()
  • Dann kann die List auch rückwärts gelesen werden
    und es können Element hinzugefügt werden.

26
Die Klasse AbstractSequentialList
  • Die Klasse AbstractSequentialList ist von
    AbstractList abgeleitet. Die Methode listIterator
    ist nicht implementiert.
  • AbstractSequentialList ist für Listen gedacht,
    die ausschließlich sequentiell bearbeitet werden
    sollen (z.B. LinkedList). Dabei kann die Liste
    vorwärts und rückwärts durchlaufen werden.
  • Zusätzliche Mehodepublic abstract ListIterator
    listIterator(int index)erzeugt einen
    ListIterator, der die Element beginnend mit dem
    Index index enthält.

27
Die Klasse LinkedList
  • Die Klasse LinkedList ist von der Klasse
    AbstractSequentialList abgeleitet.
  • LinkedList stellt eine Liste zur Verfügung, die
    hauptsächlich sequentiell verarbeitet werden
    kann.
  • Der Zugriff über index ist möglich, aber sehr
    uneffektiv.
  • Änderungen der Liste erfordern kein Umkopieren,
    wie bei ArrayList.
  • LinkedList ist also für Listen geeignet,
  • deren Größe häufig wechselt,
  • wo Element häufig gelöscht bzw. hinzugefügt
    werden,
  • die Elemente sequentiell bearbeitet werden.

28
Implementierung von LinkedList
  • Die Liste wird als doppelt zyklisch verkettete
    Liste gespeichert. Dadurch kann vorwärts und
    rückwärts zugegriffen werden.
  • Es existieren Anfang und Ende der Liste.

29
Konstruktoren und Methoden von LinkedList
  • Konstruktoren
  • public LinkedList()
  • public LinkedList(Collection c)
  • Zusätzliche Methoden
  • public void addFirst/ addLast(Object o)Hinzufügen
    am Anfang/Ende der Liste
  • public Object getFirst/ getLast()Lesen des
    ersten/letzten Listenelements
  • public Object removeFirst/ removeLast()Löschen
    des ersten/letzten Listenelements

30
Beispiel
  • Seminar als LinkedList
  • Einzige erforderliche ÄnderungCollection
    seminar new LinkedList()
  • Falls man Zugriff auf spezielle Methoden der
    LinkedList benötigt, muss manLinkedList seminar
    new LinkedList()nutzen.

31
Das Interface SortedSet
  • Das Interface SortedSet ist vom Interface Set
    abgeleitet.
  • SortedSet stellt einen Set zur Verfügung in dem
    Elemente sortiert gespeichert werden.
  • Dazu müssen die Elemente eine natürliche Ordnung
    besitzen, d.h. es läßt sich eindeutig entscheiden
    ob ein Element größer oder kleiner als ein
    anderes Element ist oder ob beide gleich sind.
  • Dazu können sie das Interface Comparable
    implementieren oder sie lassen sich mit dem zum
    SortedSet gehörigen Comparator vergleichen.
  • Die Teilmengen-Methoden (headSet, tailSet,
    subSet) liefern Sichten auf die Menge, d.h.
    Änderungen in den Teilmengen wirken sich auch auf
    die eigentliche Menge aus.

32
Methoden in SortedSet
  • public Comparator comparator()gibt den
    Comparator aus
  • public Object first/last()gibt das
    kleinste/größte Element der Menge aus
  • public SortedSet headSet/tailSet(Object element)g
    ibt die Teilmenge der Menge aus, die alle Element
    enthält die kleiner/nicht kleiner als element
    sind
  • public SortedSet subSet(Object fromElement,
    Object toElement)gibt die Teilmenge der Menge
    aus, die alle Element enthält die nicht kleiner
    als fromElement und kleiner als toElement sind

33
Das Interface Comparable
  • Das Interface Comparable definiert genau eine
    Methodepublic int compareTo(Object o)der Wert
    ist kleiner, gleich bzw. größer 0 wenn das Objekt
    kleiner, gleich bzw. größer o ist
  • Die Implementierung muss folgende Bedingungen
    erfüllen
  • sgn(x.compareTo(y)) -sgn(y.compareTo(x))
  • Transitivität x.compareTo(y)gt0
    y.compareTo(z)gt0 ? x.compareTo(z)gt0
  • x.compareTo(y)0 ? sgn(x.compareTo(z))
    sgn(y.compareTo(z))

34
Beispiel Student
public class Student implements
Comparable String nachName "" String
vorName "" long matrikelNummer
-1 ... public int compareTo(Object o) return
(int)(matrikelNummer-((Student)o).matrikelNummer)
...
35
Das Interface Comparator
  • Definiert folgende Methodepublic int
    compare(Object o1, Object o2)vergleicht die
    Objekte o1 und o2 miteinander. Die zu erfüllenden
    Bedingungen entsprechen denen von
    Comparable.compareTo .

36
Beispiel StudentCompare
import java.util. public class StudentCompare
implements Comparator public int
compare(Object o1, Object o2) return
(int)( ((Student)o1).matrikelNummer- ((Student)o
2).matrikelNummer)
37
Die Klasse TreeSet
  • Die Klasse TreeSet ist abgeleitet von AbstractSet
    und implementiert das Interface SortedSet.
  • Es wird eine Menge (keine Duplikate)
    bereitgestellt, deren Elemente entsprechend einer
    vorgegebenen Ordnung sortiert sind.
  • Die Ordnung bleibt jederzeit erhalten.
  • Durch die Speicherungsart ist das Einfügen,
    Löschen und Suchen von Elementen sehr schnell
    (O(ln n)).

38
Implementierung von TreeSet
  • TreeSet wird als binärer Baum implementiert.
Write a Comment
User Comments (0)
About PowerShow.com