Sammlungen Listen Mengen Abbildungen Algorithmen Wrapper Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 1
Einleitung Collections sind Datenstrukturen für Sammlungen von Daten Stacks Queues Priority Queues Trees Maps Collection-Frameworks bieten Schnittstellen und Klassen für den Umgang mit Sammlungen Collection-Frameworks sind ein zentraler Bestandteil jeder Klassenbibliothek z.b. Standard Template Library von C++ Smalltalk's collection classes Namespace von.net Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 2
Historie In der Java-Klassenbibliothek unterscheidet man zwei Mengen von Klassen die Collections realisieren. 1. die traditionellen Klassen (seit 1.0) - Vector - Stack - Hashtable - Dictionary - Bitset 2. das Collection API (seit 1.2) - Umfangreiches API (Sorting...) 1 & 2 existieren seit 1.2 parallel Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 3
Die traditionellen Klassen Realisiert eine Liste mit Direktzugriff die wachsen kann. Stapel (push pop) & Zuordnung von Schlüsseln auf Werte Realisiert eine Menge von Bits die einzeln gesetzt werden können. Unterstützt Operationen wie Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 4
Entwurfsziele des Collection-API in sich konsistentes Framework für Collections stellt alle wesentlichen Features für Collections zur Verfügung trotzdem überschaubar und leicht zu erlernen (siehe Zitat) effizient erweiterbar muss alte Collection-Klassen integrieren Zitat Collections Framework Overview : An interface contains a method only if either: 1. It is a truly fundamental operation: a basic operations in terms of which others could be reasonably defined 2. There is a compelling performance reason why an important implementation would want to override it. Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 5
Collection-Framework Grundlagen Collections-Framework besteht aus: Collection Interfaces Definition von Abstrakten Datentypen. General-purpose Implementations Pimäre Implementierungen der Interfaces Legacy Implementations traditionelle Klassen Wrapper Implementations Möglichkeiten die Basisimplementierungen mit zusätzlicher Funktionalität zu versehen. Convenience Implementations Spezielle hocheffiziente Implementierungen. Abstract Implementations Partielle Implementierungen als Basis für die konkreten Klassen und für eigene Erweiterungen Algorithms Oft gebrauchte nützliche Algorithmen auf Collections Infrastructure Weitere Interfaces als Unterstützung der Collection Interfaces. Array Utilities Zusammenarbeit mit Arrays Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 6
Klassenhierarchie: Interfaces und konrete Klassen Collection Map List Set SortedMap HashMap ArrayList LinkedList SortedSet HashSet TreeMap TreeSet Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 7
Interface ist elementares Interface für Sammlungen Basic Operations (müssen implementiert werden): enthalten sein ist leer und Anzahl der Elemente Iterator Optionale Operationen (können implementiert sein): Anfügen von Elementen Löschen Beibehalten von Elementen)! " # $$ %! &! '! (! )! $$ %! &!! %! &! &! Umwandlung in Arrays $$ %*+&! %*+&%*+! Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 8
Anmerkungen zu Gestaltung der Methoden Konkrete Klassen sollten zwei Konstruktoren besitzen Zum Erzeugen einer leeren Sammlung Zum Erzeugen mit Elementen einer exisitierenden Sammlung Optionale Operationen können - %'. werfen z.b. Hinzufügen zu unveränderbare Sammlungen Boolesche Methoden Rückgabewert gibt an ob sich Sammlung verändert hat Verwendung von Wrapper-Klassen für primitive Datentypen / ( 0 Konvertierung in Array Als %-Array Als Array eines bestimmten Typs (Array des gewünschten Typs wird als Parameter übergeben) 012&0! %*+%1&! 3*+313*+&23*4+! Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 9
Iteration über Elemente Interface ( dient zum Iterieren über die Elemente ersetzt' aus alter API Elemente können entfernt werden Methodennamen wurden verbessert " ( # 5.! %.!! Beispiel: 5 # ( 1! 2 5.# % 1.! " " 5 #! Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 10
Sammlungen Listen Mengen Abbildungen Algorithmen Wrapper Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 11
Interface 0 0 ist ein spezielles Interface welches von einer Reihenfolge der Elemente ausgeht Damit hat jedes Element eine Position Und es sind folgende zuätzliche Operationen definiert: Einfügen an einer bestimmten Position Zugriff auf ein Element an einer bestimmten Position Löschen eines Element an einer bestimmten Position Position eines Elements Spezieller 0( " 0. # $$.6%! %.! %.! %.6%! $$.%"%! (.%"%! $$ 0( (! 0( (.! Elemente in einem bestimmten Bereich $$ 0 0 "(.6 (.! Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 12
Interface 0( Interface 0( erlaubt erweiterte Iteration über Elemente Damit sind folgende zusätzliche Methoden definiert: Iteration nach hinten und nach vorne Einfügen an der aktuellen Position Setzen des aktuell gelesenen Elements Abfrage der Position des nächsten und vorherigen Elements " 0(. ( # 5.! 3! %.!.(.! %! (.! %!! %! Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 13
Implementierungen von Collection-Interfaces AbstractCollection abstrakte Klassen AbstractList AbstractSet AbstractMap Abstract SequentialList LinkedList ArrayList HashSet TreeSet HashMap TreeMap konkrete Klassen LinkedHashSet LinkedHashMap IdentityHashMap Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 14
Implementierungen von Collection-Interfaces: Überblick Implementations Hash Table Resizable Array Balanced Tree Linked List Hash Table + Linked List Set HashSet TreeSet LinkedHashSet Interfaces List ArrayList LinkedList Map HashMap TreeMap LinkedHashMap Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 15
Implementierungen von 0 Es gibt zwei alternative Implementierungen von List: 00: doppelt verkette Liste gut bei Einfügen in der Mitte schlecht bei direktem Zugrif auf Element &0: auf der Basis von Arrays gut bei direktem Zugriff schlecht beim Einfügen von Elementen Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 16
Sammlungen Listen Mengen Abbildungen Algorithmen Wrapper Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 17
Interface Entspricht dem mathematischen Konzept der Menge d.h. Elemente können maximal einmal enthalten sein Vergleich der Elemente erfolgt mit 7 prinzipiell als Element zulässig Keine Aussage über Reihenfolge der Elemente hat identische Methoden wie Collection Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 18
Interface wie aber Sortierung der Elemente Sortierkriterium kann sein: : Elemente müssen -Interface implementieren und Vergleich der Elemente erfolgt mittels 8-Methoden : dem wird ein eigenes -Objekt übergeben mit dem die Elemente verglichen werden " # 8%! ". #! % "! % '! %! % "'6% '! % "'! " # % 96% :! 7 %! 7 Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 19
Implementierungen von Implementierungen von : : - Auf der Basis von Hashtabellen - schneller Zugriff und schnelles Einfügen Implementierungen von : 8: - Auf der Basis von Red-Black-Trees - binäre Sortierung Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 20
Beispiel und 3 # %96%:# 3139! 313:! 58 5! 12 82 3! 2 3";6";6"0);! 2 3"/);6"<;6"=);! 2 3"%;6";6">;!$$" Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 21
Sammlungen Listen Mengen Abbildungen Algorithmen Wrapper Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 22
Interface < Abbildung von Schlüsseln auf Werte Jeder Schlüssel maximal einmal enthalten Vorsicht bei veränderlichen Schlüsselwerten Jeder Eintrag ist ein Objekt vom Typ <' " < # $$?%! %! % %! '! )! $$! % % 6%! &<! % %! " <' # %?! $$ 2 %!! % %!!! Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 23
Interface < wie < aber mit Sortierung der Schlüssel " <.< #! %"?! %?! < <% "?6%? Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 24
Implementierungen von < Implementierungen von <: <: - Auf der Basis von Hashtabellen - schneller Zugriff und Einfügen 0<: - zusätzlich definierte Reihenfolge auf Basis von Linked-Lists ><: - schwache Referenzen der Werte (<: - Vergleich der Keys auf Referenzgleichheit Implementierungen von <: 8<: - Auf der Basis von Red-Black-Trees - binäre Sortierung Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 25
Sammlungen Listen Mengen Abbildungen Algorithmen Wrapper Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 26
Hilfsklasse Klasse bietet eine Vielzahl von -Methoden für: Algorithmen Erzeugen von Wrapper für die Collection-Implementierungen Algorithmen in Collections: # 0 6%! 0 6% 6! 0 60! "0 6%! %.! %. 6! %! % 6! 0 6%! 0! ""0! ""0 6@! %! 00%! < <% 6%! 0! 0 6! Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 27
Beispiel Algorithmen: Mischen von Karten Folgende Methode mischt Karten 0 "" # *+ 12 *+#;;6;;6;;6; ;! *+122 *+#;;6;:;6;A;6;B;6;C;6;D;6;E;6;F;6 ;G;6;94;6;;6;7 ;6;;! 012 &0! " 14!H!II# " 14!H!II# *+I;";I *+! ""!! Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 28
Wrapper Collection-Frameworks erlaubt über Wrapper besimmte Sichten von - Objekten zu erzeugen Diese Sichten realisieren das entsprechende Interface mit bestimmten Zusätzen Zwei wichtige Wrapper sind Wrapper mit: )-Methoden: exklusiver Zugriff auf Collection pro Thread "-Methoden: unveränderliche Sicht auf Collection Klasse bietet Methode solche Wrapper zu erzeugen: )! )! 0)00! < )<<! )! < )<<! "! "! 0 "00! < "<<! "! < "<<! Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 29
Zusammenfassung Listen Elemente in fester Reihenfolge Zugriff auf Elemente über Index möglich Suchfunktionen Mengen Elemente maximal einmal enthalten Eventuell sortiert Abbildungen Abbildung von Schlüsselobjekten auf Wertobjekte Iteration über Elemente Mittels ( beziehungsweise 0( Hilfsklasse Zum Suchen Füllen Mischen und Sortieren Zum Erzeugen synchronisierter oder unveränderbarer Sammlungen Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 30
Literatur Java 2 SDK Standard Edition Documentation Guide to Features - Collection Framework http://java.sun.com/j2se/1.4.2/docs/guide/collections/index.html Horstmann Cornell Core Java 2 Band 2 - Expertenwissen Markt und Technik 2002: Kapitel 2 Krüger Handbuch der Java-Programmierung 3. Auflage Addison-Wesley 2003 http://www.javabuch.de: Kapitel 14 und 15 Pratikum SWE 2 M. Löberbauer T. Kotzmann H. Prähofer 31