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