1 / 56

Ashraf Abu Baker baker@gdv.cs.uni-frankfurt.de

Johann Wolfgang Goethe-Universität Professur für Graphische Datenverarbeitung Fachbereich Informatik und Mathematik Prof. Dr. Detlef Krömker. Einführung in die OOP in Java. WS 07/08. Ashraf Abu Baker baker@gdv.cs.uni-frankfurt.de. Generics. vertausche A[j] & A[j]. Generics. Generics.

Télécharger la présentation

Ashraf Abu Baker baker@gdv.cs.uni-frankfurt.de

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Johann Wolfgang Goethe-Universität Professur für Graphische Datenverarbeitung Fachbereich Informatik und Mathematik Prof. Dr. Detlef Krömker Einführung in die OOP in Java WS 07/08 Ashraf Abu Baker baker@gdv.cs.uni-frankfurt.de Java-Intensivkurs WS07/08 Folie 1

  2. Generics vertausche A[j] & A[j] Java-Intensivkurs WS07/08 Folie 2

  3. Generics Java-Intensivkurs WS07/08 Folie 3

  4. Generics • Ein Sortieralgorithmus kann Elemente beliebiger Datentypen sortieren, sofern diese paarweise vergleichbar sind (auf den Elementen ist eine Ordnungsrelation definiert • NonGenericBubbleSort beschränkt sich jedoch nur auf das Sortieren von Integer-Zahlen • Wie muss die Implementierung angepasst werden damit Elemente anderer Datentypen sortiert werden können? Java-Intensivkurs WS07/08 Folie 4

  5. Generics • Anpassung des Algorithmus für die Sortierung von Float • Überladung der bubbelSort-Methode • Überladung und Anpassung der swap-Methode Anpassung der temp-Variable Java-Intensivkurs WS07/08 Folie 5

  6. Generics • Wie oft müssen die Methoden bubbleSort() und swap() überladen werden? • Für die 7 unterschiedlichen primitiven Datentypen (int, long, double, …) müssten die beiden Methoden jeweils 6 Mal überladen werden •  Die Klasse enthält 14 Methoden, die sich kaum Unterscheiden • Dies ist kein guter Stil einen einfachen Sortieralgorithmus zu implementieren • Lösung?? • Die Klasse BubbleSort wird als generische Klasse implementiert Java-Intensivkurs WS07/08 Folie 6

  7. Generische Klassen Typparameter wenn A[j]<A[j-1] Java-Intensivkurs WS07/08 Folie 7

  8. Generische Klassen Java-Intensivkurs WS07/08 Folie 8

  9. Generische Klassen • GenericBubbleSort ist eine generische Klasse, die einen nicht näher spezifizierten Datentyps namens T verwendet • Alles was über T bekannt ist, ist dass er eine Unterklasseasse von Object ist, und das Comparable-Interface implementiert • Die Elemente von T sind daher paarweise vergleichbar Java-Intensivkurs WS07/08 Folie 9

  10. Generische Klassen • GenericBubbleSort ist nun eine parametrisierte Klasse • Eine Klasse ist generisch, wenn sie so definiert ist, dass sie bei ihrer Instanziierung nicht primitive Datentypen als Parameter erwartet • class MyClass<TypeArgument1, TypeArgument2, …, TypArgumentn>{//class body} MyClass<Integer, String, …, StringBuffer> myClassObject=new MyClass<Integer, String, …, StringBuffer>(); • TypeArgument ist eine Abstraktion eines nicht primitiven Datentyps Java-Intensivkurs WS07/08 Folie 10

  11. Generische Klassen //Sortierung von Integer-Zahlen //Sortierung von Double-Zahlen //Sortierung von Strings Java-Intensivkurs WS07/08 Folie 11

  12. Generische Methoden • Auch Methoden können als generisch deklariert werden • Statt die gesamte Klasse BubbleSort als generisch zu deklarieren, könnte man nur die Methoden bubbleSort() und swap() generisch deklarieren //bubbleSort() ist nun generisch Java-Intensivkurs WS07/08 Folie 12

  13. Generische Methoden Die Methode swap ist nun generisch Java-Intensivkurs WS07/08 Folie 13

  14. Generics • http://angelikalanger.com/Articles/JavaMagazin/Generics/GenericsPart1.html • http://angelikalanger.com/Articles/JavaMagazin/Generics/GenericsPart2.html Java-Intensivkurs WS07/08 Folie 14

  15. Collections (Sammlungen) Datenstrukturen • Die Effizienz eines Algorithmus hängt sehr eng mit der Wahl der richtigen Datenstruktur zusammen • Collections in Java sind Datenstrukturen, die als Container aufgefasst werden können, in denen Objekte gespeichert, verwaltet und manipuliert werden können • Den Kern des Collections-Frameworks bilden die sechs Interfaces: • Collection, List, Set, SortedSet, Map und SortedMap: Java-Intensivkurs WS07/08 Folie 15

  16. Collections • Alle Collections außer den Maps implementieren das Collection-Interface • Das Interface stellt u. a. Methoden zum Suchen, Einfügen und Entfernen von Elementen Java-Intensivkurs WS07/08 Folie 16

  17. Das Collection-Interface Java-Intensivkurs WS07/08 Folie 17

  18. Listen, Mengen & Maps • Aufteilung der Collections in 3 Kategorien: • Listen (Lists) • Mengen (Sets) • Tabellen (Maps) • Listen sind Sammlungen, die dynamischen Arrays ähneln • Ihre Elemente sind geordnet und indiziert Java-Intensivkurs WS07/08 Folie 18

  19. Listen, Mengen & Maps • Sets repräsentieren (mathematische) Mengen, die keine Duplikate zulassen • Eine Map ist eine Sammlung von Paaren • Jedes Paar besteht aus einem eindeutigen Schlüssel und einem zugehörigen Objekt (Wert) • Sind vergleichbar mit assoziativen dynamischen Arrays • Werden mithilfe von Hash-Strukturen implementiert Java-Intensivkurs WS07/08 Folie 19

  20. Listen, Mengen & Maps • Es gibt sortierte und unsortierte bzw. geordnete und nicht geordnete Sets und Maps • Mengen- und Map-Elemente sind nicht indiziert Java-Intensivkurs WS07/08 Folie 20

  21. Listen • Listen sind vergleichbar mit dynamisch wachsenden Arrays • Sind geordnet (sie speichert ihre Elemente in der Reihenfolge, in der sie eingefügt wurden) • Jedes Element hat einen Index • Die Indizierung fängt, wie bei Arrays, bei 0 an • Indexbasierter Zugriff auf Listenelemente ist möglich • Das Einfügen und Entfernen von Elementen an beliebiger Stelle in Listen ist möglich • Listen können null-Objekte und Duplikate speichern • Die Länge einer Liste ist theoretisch unbeschränkt Java-Intensivkurs WS07/08 Folie 21

  22. Listen • Beispiele: • ArrayList, Vector, Stack, und LinkedList Java-Intensivkurs WS07/08 Folie 22

  23. Listen Java-Intensivkurs WS07/08 Folie 23

  24. ArrayList & Vector • java.lang.ArrayList und java.lang.Vector • Implementieren das List-Interface • Sie unterscheiden sich jedoch darin, dass die Methoden von Vector synchronisiert sind • Mehrere Threads auf einen Vector gleichzeitig zugreifen können ohne die Integrität der Daten zu verletzen • Vektoren Thread-sicher (thread-safe) • Aufgrund der Synchronisation sind Vektoren langsamer als ArrayLists und sollten daher nur verwendet werden, wenn mehrere Threads auf den Vektor konkurrierend zugreifen sollen • Vectors sind keine Vektoren im mathematischen Sinne sondern Listen Java-Intensivkurs WS07/08 Folie 24

  25. ArrayListen & Vector //Listen können null-Referenzen //Ein Duplikat //Ein Duplikat Java-Intensivkurs WS07/08 Folie 25

  26. LinkedList Java-Intensivkurs WS07/08 Folie 26

  27. LinkedList • Eine LinkedList ist eine doppelt verkettete Liste Java-Intensivkurs WS07/08 Folie 27

  28. LinkedList • booleanadd(E e)undbooleanoffer(E e): • Fügen das Element e am Ende der Liste ein • E remove()undE poll(): • Entfernen das erste Element in der Liste und geben es zurück • E element() und E peek(): • Liefern das erste Element in der Liste ohne es zu entfernen • Beispiel: http://www.roseindia.net/java/jdk6/LinkedListExample.shtml Java-Intensivkurs WS07/08 Folie 28

  29. Mengen • Eine Menge ist eine in der Regel ungeordnete Sammlung von Elementen, die keine Duplikate zulässt • Bevor ein Element in eine Menge eingefügt werden kann, wird zunächst überprüft, ob es bereits darin enthalten ist • Erst wenn sichergestellt ist, dass es nicht vorhanden ist, wird es in die eingefügt Java-Intensivkurs WS07/08 Folie 29

  30. Mengen • Im Gegensatz zu Listen ist bei Mengen ein indexbasierter Zugriff auf die Elemente nicht möglich • Es gibt sortierte und unsortierte Mengen • Die wichtigsten Mengen-Collections in Java sind HashSet , TreeSet und LinkedHashSet Java-Intensivkurs WS07/08 Folie 30

  31. HashSet • Speichert die Elemente in einer Hashtabelle und lässt das Einfügen von null-Objekten, jedoch nicht von Duplikaten zu • Die Elemente eines HashSet sind nicht geordnet • Ein HashSet verlässt sich auf die Implementierung der hashCode()-Methode ihrer Objekte • Dies ist die Methode, die HashSet bei der Suche nach Duplikaten aufruft Java-Intensivkurs WS07/08 Folie 31

  32. HashSet null-Objekte sind erlaubt Java-Intensivkurs WS07/08 Folie 32

  33. LinkedHashSet • Hat die gleichen Eigenschaften wie ein HashSet • Unterschied: • LinkedHashSet sind geordnet Java-Intensivkurs WS07/08 Folie 33

  34. TreeSet • Speichert seine Elemente in einem Rot-Schwarz-Baum • Lässt weder Duplikate noch null-Objekte zu • Erweitert Set um zahlreiche Methoden für den Umgang mit sortierten Daten: Java-Intensivkurs WS07/08 Folie 34

  35. TreeSet null-Objekte sind erlaubt Java-Intensivkurs WS07/08 Folie 35

  36. TreeSet Java-Intensivkurs WS07/08 Folie 36

  37. Tabellen (Maps) • Eine Map ist eine Datenstruktur, die Schlüssel/Objekt-Paare speichert • Die Schlüssel einer Map müssen eindeutig sein und sollten die Methode hashCode() implementieren • hashCode() wird aufgerufen, wenn zwei Schlüssel auf Gleichheit überprüft werden sollen • Es gibt sortierte und unsortierte, geordnete und ungeordnete Maps Java-Intensivkurs WS07/08 Folie 37

  38. Tabellen (Maps) • HashMap, HashTable, TreeMap und LinkedHashMap • Sie alle implementieren das Map-Interface Java-Intensivkurs WS07/08 Folie 38

  39. Das Map-Interface Java-Intensivkurs WS07/08 Folie 39

  40. Das Map-Interface • V put(K key, V value): • Fügt den Schlüssel key und seinen Wert in die Tabelle ein Falls ein Schlüssel bereits vorhanden ist, wird sein alter Wert durch den neuen Wert ersetztDie Methode gibt dann den alten Wert des Schlüssels zurück Wenn der Schlüssel nicht vorhanden ist, gibt die Methode null zurück • booleancontainsKey(Object key): • Gibt true zurück, wenn der Schlüssel in der Tabelle enthalten ist Java-Intensivkurs WS07/08 Folie 40

  41. Das Map-Interface • V get(Object key): • Gibt das dem Schlüssel zugeordnete Objekt zurück, oder null, falls der Schlüssel nicht in der Tabelle enthalten ist • Set<K> keySet(): • Gibt alle Schlüssel der Tabelle als Menge zurück • Collection<V> values(): • Gibt eine Collection der Objekte in der Map zurück. In der Collection können Duplikate enthalten sein. Java-Intensivkurs WS07/08 Folie 41

  42. HashMap und Hashtable • Beide implementiert auf der Basis einer Hashtabelle • Ihre Arbeitsweisen sind identisch • Die Methoden von HashTable sind allerdings synchronisiert und daher Thread-sicher • HashMap und Hashtable lassen null-Schlüssel und null-Objekte zu • Ihre Elemente sind nicht geordnet Java-Intensivkurs WS07/08 Folie 42

  43. TreeMap • TreeMap implementiert das SortedMap-Interface •  speichert ihre Elemente sortiert • TreeMaps lassen keine null-Schlüssel zu • Ein Schlüssel kann jedoch mit einem null-Objekt assoziiert sein Java-Intensivkurs WS07/08 Folie 43

  44. TreeMap null-Schlüssel sind nicht erlaubt null-Werte sind erlaubt Java-Intensivkurs WS07/08 Folie 44

  45. TreeMap Java-Intensivkurs WS07/08 Folie 45

  46. LinkedHashMap • LinkedHashMap merkt sich die Reihenfolge, in der die Schlüssel/Wert-Paare eingefügt werden Java-Intensivkurs WS07/08 Folie 46

  47. LinkedHashMap Java-Intensivkurs WS07/08 Folie 47

  48. Collections-Übersicht Java-Intensivkurs WS07/08 Folie 48

  49. Generische Collections • Vor JDK 1.5 waren alle Collection-Klassen nicht generisch • Mit der add-Methode einer nicht generischen Liste könnte man z.B. Objekte unterschiedlicher Klassen in die Liste einfügen • Collections waren daher nicht homogen Casting erforderlich Java-Intensivkurs WS07/08 Folie 49

  50. Generische Collections • Seit Version 5 sind alle Collection-Klassen und -Interfaces generisch und somit homogen • Zugriffe auf Elemente erfordern kein Casting mehr: Casting ist nicht erforderlich Java-Intensivkurs WS07/08 Folie 50

More Related