Algorithmen und Datenstrukturen in Java

Werbung
Algorithmen und Datenstrukturen
in Java
2007 Jiri Spale, Algorithmen und Datenstrukturen in Java
1
Enumeratoren und Iteratoren
Daten üblich gespeichert in:
Arrays, verketteten Listen, Bäumen, …
Geläufige Aufgaben:
Gehört das Datum D dazu?
Daten durchwandern
Bedarf: ein einheitlicher Mechanismus für Grundaufgabentypen
Problem 1: Programmiermechanismen zur Erledigung obiger Aufgaben
bei jedem Typ der Datenstruktur anders.
Problem 2: Im OOP sind die internen Datenstrukturen nicht zugänglich
Lösung: Enumeratoren, Iteratoren
2007 Jiri Spale, Algorithmen und Datenstrukturen in Java
2
Interface Enumeration
2 Funktionen zum Iterieren durch eine Datenstruktur:
•
hasMoreElements() … Abfrage, ob Ende
•
nextElement() … liefert das nächste Element; zurück oder gezielt
geht nicht
Bsp. Bauernregeln
2007 Jiri Spale, Algorithmen und Datenstrukturen in Java
3
Klasse Vector
•
•
•
•
•
•
Intern als Array implementiert
Ein vorhandenes Array wird bei Bedarf durch ein größeres Array
ersetzt
Zugriff über Indizes
Operator [] unbekannt
Methoden akzeptieren Index als ein Parameter
Vector-Elemente: Instanzen aller von Object abgeleiteten Klassen
- Mischung von Datentypen erlaubt
- Konsequenz: Programmierer muss wissen, welche Typen er drin
hat
- Konsequenz 2: primitive Datentypen nicht als Element erlaubt
(Bsp. Vector)
2007 Jiri Spale, Algorithmen und Datenstrukturen in Java
4
Klasse Vector: Konstruktoren
1. Vector()
leer, Anfangskapazität 10 Elms
2. Vector(int kapazität)
leer, Anfangskapazität kapazität Elms
3. Vector(int kapazität, int kapazitätZuwachs)
leer, Anfangskapazität kapazität Elms,
falls erschöpft, Erhöhung um kapazitätZuwachs
4. Vector(Collection xxx)
Collections kommen später
2007 Jiri Spale, Algorithmen und Datenstrukturen in Java
5
Klasse Vector: Methoden #1
•
•
•
•
•
•
•
•
•
•
•
•
•
•
void addElement(Object o)
int capacity()
Object clone() … „flache“ Kopie,
Original und Kopie referenzieren dieselben Element-Objekte
boolean contains(Object o)
void copyInto(Object array[]) … Vector → array
Enumeration elements() … gibt ein Aufzählungsobjekt zurück
Object firstElement()
Object elementAt(int index)
Object lastElement()
int indexOf(Object o)
int indexOf(Object o, int index) … ab index
int lastIndexOf(Object o)
int lastIndexOf(Object o, int index) … rückwärts
boolean isEmpty()
2007 Jiri Spale, Algorithmen und Datenstrukturen in Java
6
Klasse Vector: Methoden #2
•
•
•
•
•
•
•
•
•
void insertElementAt(Object o, int index)
… fügt o an der Stelle index
void removeAllElements()
boolean removeElement(Object o)
void removeElementAt(int index)
void setElementAt(Object o, int index)
… o ersetzt Elm an der Stellen index
void setSize(int size) … neue Größe; überzählige Elms entfernt
int size() (v.size() <= v.capacity() )
String toString() … Vector → String
- textuelle Repräsentation der Elms
void trimToSize() … capacity wird der size angepasst
2007 Jiri Spale, Algorithmen und Datenstrukturen in Java
7
Klassische Datenstrukturen in Java
•
Klasse Stack
Bsp, intern Vector
•
Queue … es gibt keine Klasse in Java
Bsp: Implementierung basierend auf Vector
Nachteil: funktioniert, aber nicht schnell
•
Klasse Hashtable
•
Collection API
2007 Jiri Spale, Algorithmen und Datenstrukturen in Java
8
Klasse Hashtable
•
•
•
•
Schlüssel-Wert-Paare
Hashfunktion in Java: Aufsummierung von Zeichen
Kollisionsfunktion in Java: verkettete Liste (gestreute Verkettung)
Dynamisches Hashing mit automatischen Rehash:
- Ist ein gegebener Füllgrad (Java-Termin: Füllfaktor) überschritten, verlängert
sich die Tabelle und wird neu berechnet (rehash)
- Ist die neue Hashtabelle fertig, wird die alte gelöscht => ab und zu
Zeitverzögerungen
- Der Zeitpunkt von Rehash kann nicht
-- erzwungen werden
-- vorhergesagt werden
2007 Jiri Spale, Algorithmen und Datenstrukturen in Java
9
Hashtable: Konstruktoren
1.
Hashtable()
Anfangskapazität 118 Einträge, Füllfaktor 0.75 (=75%)
2.
Hashtable(int initialCapacity)
Anfangskapazität lt. Vorgabe, Füllfaktor 0.75 (=75%)
3.
Hashtable(int initialCapacity, float loadFactor)
beide Parameter: Vorgabe
IllegalArgumentException
- bei zu kleiner initialCapacity bzw. zu großem loadFactor
2007 Jiri Spale, Algorithmen und Datenstrukturen in Java
10
Hashtable: Methoden#1
•
Object put (Object key, Object value)
key, value ≠ null
Falls key bereits belegt, wird value überschrieben und der alte Wert
zurückgegeben.
Falls key nicht belegt, Rückgabe null
•
Object get (Object key)
Rückgabe: Wert oder null
•
•
boolean contains (Object value)
boolean contains (Object key)
Die Suche nach Keys geht viel schneller als die Suche nach Values:
Berechnung der Hash-Funktion vs. Durchlaufen aller Listen
2007 Jiri Spale, Algorithmen und Datenstrukturen in Java
11
Hashtable als Enumerator: Methoden#2
Enumeration keys()
liefert eine Aufzählung von Schlüsseln
•
Enumeration elements()
liefert eine Aufzälung der Werte
Beide sind synchronized – kein neues Einfügen/Löschen möglich bevor fertig
•
•
•
•
•
String toString
Zeichenkette mit Teilstrings in der Form Schlüssel = Wert
boolean equals (Object o)
Vergleich zweier Hashtabellen
int hashCode()
Die ganze Hashtabelle wird als ein Objekt betrachtet. hashCode liefert den
Hashcode für die ganze Tabelle.
Benutzung: wenn eine Hashtabelle selbst als Schlüssel benutzt werden soll.
clone()
Erstellt Kopie einer Hashtabelle. Die Werte selbst werden nicht geklont.
2007 Jiri Spale, Algorithmen und Datenstrukturen in Java
12
Collection API
Container = Collection
Interface Collection
•
gemeinsamer äußerer Rahmen
•
gemeinsame Operationen zum Hinzufügen, Löschen, Selektieren, Finden
Erweiterungen (Unterschnittstellen):
•
BeanContext
•
BeanContextServices
•
List
•
Set
•
SortedSet
2007 Jiri Spale, Algorithmen und Datenstrukturen in Java
13
Collection API:Methoden
•
•
•
•
•
•
•
•
•
•
•
•
boolean add (Object o)
boolean addAll(Collection c)
void clear()
boolean contains (Object)
boolean containsAll(Collection c)
boolean equals(Object o)
int hashCode()
boolean isEmpty()
Iterator iterator()
int size()
object[] toArray()
object[] toArray (Object a[] )
2007 Jiri Spale, Algorithmen und Datenstrukturen in Java
14
Collection API: Algorithmen
•
•
•
•
•
•
void reverse()
Reihenfolge der Elemente wird umgedreht
void fill()
Belegung mit gleichem Wert
void Copy(List dest, List src)
Object min(Collection Coll)
Object max(Collection Coll)
Sort(List list)
Merge-Sort
2007 Jiri Spale, Algorithmen und Datenstrukturen in Java
15
Herunterladen