Datenstrukturen

Werbung
Datenstrukturen
●
Ziele
●
Nutzen von Datenstrukturen
●
Funktionsweise verstehen
●
Eigenen Datenstrukturen bauen
●
Vordefinierte Datenstrukturen kennen
●
Hiflsmethoden komplexer Datenstrukten kennen
Datenstrukturen
●
●
●
●
●
speichern Daten
brauchen Flexibilität (ein Lager muss auch
Objekte aus unterschiedlichen Regalen etc
zurückgeben)
sollen wenig ungenutzten Platz verbrauchen
(wenig overhead)
sollen die Bedienung sehr einfach halten
im UML Klassendiagramm sind Datenhaltungen
mit Raute versehen
Datenstrukturen
●
●
Aggregation von
Objekten in
Datenstrukturen
Die Speichervariable
wird im UMLKlassenblock
weggelassen
Datenstrukturen
●
sollen mit beliebigen Waren befüllt werden
können
●
Alternative A: Objekte als kleinster gem. Nenner
●
Alernative B: Generics
●
●
●
generische Datenstrukturen verwenden (generics,
mit check, ob man immer den richtigen Datentyp
reinsteck und rausbekommt)
<Datentyp> , in Dokumentation <E>
die primitiven Datenstrukturen brauchen "wrapper"
damit sich auch objekte werden
ArrayList
●
Ein "unendliches"
Array
Array
ArrayList
value
value
value
value
value
value
value
value
value
value
value
value
ArrayList
●
Javadoc http://docs.oracle.com/javase/6/docs/api/index.html?java/util/ArrayList.html
Schlange (Interface Queue)
●
First-In-First-Out
●
Provided by class LinkedList
●
Methods: add and remove
http://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Data_Queue.svg/300px-Data_Queue.svg.png
Haufen (class Stack)
●
Last-In-First-Out
●
Method pop and push
http://img.c4learn.com/2010/02/Stack-Operation-in-C-Programming.jpg
Interface Set
●
modellierte eine Mathematische "Menge"
●
keine doppelten Elemente erlaubt
●
eine implementierende Klasse ist HashSet
●
Javadoc http://docs.oracle.com/javase/6/docs/api/java/util/Set.html
Interface Map
●
●
Ist ein Mapping =
Abbildung eines
Indizes auf ein
beliebiges Objekt
Implementierende
Klasse ist HashMap
●
http://docs.oracle.com/javas
e/6/docs/api/java/util/HashM
ap.html
Hash-Funktion
●
math. Funktion
●
●
Abbildung "große"
Menge auf "kleine"
Menge
z.B. Funktion abs()
bildet alle natürlichen
zahlen auf die
positiven ab
Jorge Stolfi, Hash-Funktion, wiki
HashMap
●
Implementierung des
Map-Interfaces durch
Hash-Funktion
HashMap
●
Jeder Key ist nur
einmal erlaubt (wie in
Set)
HashMap
ArrayList
(value)
value
Key
object
object
Key
value
value
Key
ArrayList
(value)
Key
Key
Baum (classTreeSet, TreeMap)
●
Bietet obere Grenze von log2(n) Zugriffen beim
Suchen / Einfügen
●
Durch sortierte Einträge
●
Warum log2(n)?
http://www.calgary-city-maps.com/images/Calgary_phone_book.jpg
Support for comparison
●
B+tree
●
●
2
Keys
4
Keys are sorted
2
3
4
5
2 5 9 0
4 5 2 8
2 1 4 6
For char/text
attributes use a
index length
1
6 2 4 8
Samples are
sorted at time of
insertion
3 1 2 6
●
B+-Tree
Attribute 1
Attribute 2
Attribute 3
Attribute 4
B+Tree
●
Contains buckets
●
The tree consists of
–
Inner nodes
●
–
Contain only keys and pointers-to-buckets
End nodes (the leaves)
●
●
Bucket
Contain keys, pointers-to-buckets and pointers-to-data
Each buckets contains
–
–
–
between n/2 ≤ m ≤ n keys
m+1 pointers-to-buckets or m pointers-to-data (only
leaves)
The keys in the bucket are ordered
Creating a B+Tree
●
Create a B+Tree for the following
data using attribute 2 (red) and n=3
●
The insertion order is from top to bottom
1.Insert “5”
Samples
Keys
2 5 9 0 9
5
2 6 7 0 9
6
1 2 9 0 9
2
1 4 5 0 9
4
4 8 2 0 1
8
4 9 9 0 1
9
This bucket contains a key and a
pointer to a data sample
5
2 5 9 0 9
2
2.Insert “6”,”2”
5
1 2 9 0 9
6
2 6 7 0 9
Maximal size for the
bucket is reached!
2 5 9 0 9
3.Insert “4”
5
2
2
1 2 9 0 9
4
5
This bucket contains a pointers to other buckets
5
6
2 5 9 0 9
1 4 5 0 9
2 6 7 0 9
Creating a B+Tree
4. Insert “8”
2
2
5
5
4
1 2 9 0 9
5
2 5 9 0 9
5
2
2
4
1 2 9 0 9
1 4 5 0 9
●
8
4 8 2 0 1
2 6 7 0 9
1 4 5 0 9
5. Insert “9”
6
5
8
5
8
6
2 5 9 0 9
2 6 7 0 9
8
9
4 9 9 0 1
4 8 2 0 1
If a bucket splits
●
●
the middle key travels “up” to the parent
The pointers are named according to the smallest
key in the bucket to which the pointer points
Instance-Of
●
●
Mit instanceOf <Klassentyp> kann abgefragt
werden, ob ein Objekt ein Kind (direktes oder
indirektes) einer bestimmten Klasse ist
Task Zusatz
●
●
Überprüfe Sie bei der Zurückgabe aus der
Hashmap, zu welcher konkreten Klasse das Objekt
gehört und Konvertieren Sie es in diese Klasse
Konvertieren z.B. In Direktorin: (Direktorin)object
Iteratoren
●
●
Verkettete Listen auf die enthaltenen Objekte
Mit Iterator::next wird Pointer auf das nächste
Objekt gelegt
Iterator
next
value
value
value
value
Herunterladen