Java-Intensivkurs WS07/08 Folie 1 Ashraf Abu Baker Johann Wolfgang Goethe-Universität Professur für Graphische Datenverarbeitung.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Sortieren I - Bubblesort -
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
der Universität Oldenburg
Gliederung Motivation / Grundlagen Sortierverfahren
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Listen Richard Göbel.
Sortierverfahren Richard Göbel.
Motivation Richard Göbel.
Konstruktoren.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Einführung in die OOP in Java
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Klassen und Objekte
Das Collection-Framework von JAVA
Einführung in die Programmierung Datensammlung
Informatikunterricht mit Java
Kollektionstypen (1) Es sind polymorphe Typkonstruktoren, jeweils als Sorten- und als Klassenkonstruktor (t,v beliebige Typen): –set, Set :Ungeordnete.
Stacks Referat im Fach Basisinformationstechnologien von Venelina Koleva.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Grundlagen der Informatik 1
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Informatik 1 Letzte Übung.
Variablenkonzept Klassisch, in Java Basistyp
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
EPROG Tutorium #6 Philipp Effenberger
EPROG Tutorium #5 Philipp Effenberger
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Java-Kurs Übung Besprechung der Hausaufgabe Listen und Mengen Komplexitäten Iteratoren (Durchlaufen von Listen/Mengen)
Java-Kurs Übung Besprechung der Hausaufgabe
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 14. Vorlesung WS 2001/2002.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 10. Vorlesung WS 2002/2003.
Einführung in die OOP in Java
M a r c – o l i v e r p a h l Informatik II – Kapitel 12 „Sortier-Algorithmen“ Zusammenfassung des Kapitel 12 Küchlin, Weber, Einführung in die Informatik,
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Die STL. Schreiben und Lesen von Dateien  Einbinden von  Lesen und Schreiben über stream-Objekte Streams führen Transformationen zwischen Programmobjekten.
Java Programme nur ein bisschen objektorientiert.
Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Generisches Programmieren.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Import java.util.*; Hilfsklassen, die man eigentlich immer braucht.
Konstruktoren.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Implementieren von Klassen
 Präsentation transkript:

Java-Intensivkurs WS07/08 Folie 1 Ashraf Abu Baker Johann Wolfgang Goethe-Universität Professur für Graphische Datenverarbeitung Fachbereich Informatik und Mathematik Prof. Dr. Detlef Krömker

Java-Intensivkurs WS07/08 Folie 2 Generics class NonGenericBubbleSort{ public void bubbleSort (Integer [] A){ for (int i=0;i<A.length;i++) { for(int j=A.length-1;j>=i+1;j--){ if (A[j].compareTo(A[j-1])<0){//wenn A[j]<A[j-1] swap(A, j, j-1); } }}} //vertauscht A[i] und A[j] public void swap(Integer []A,int i, int j){ Integer temp=A[i]; A[i]=A[j]; A[j]=temp; }} vertausche A[j] & A[j]

Java-Intensivkurs WS07/08 Folie 3 Generics class BubbleSorter { public static void main(String[] args) { Integer[] A=new Integer[]{-1,0,4,2,1,0,3}; NonGenericBubbleSort bubbleSorter=new NonGenericBubbleSort(); bubbleSorter.bubbleSort(A); for (Integer element : A) System.out.print(element+" "); } Ausgabe:

Java-Intensivkurs WS07/08 Folie 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 5 Generics Anpassung des Algorithmus für die Sortierung von Float Überladung der bubbelSort-Methode Überladung und Anpassung der swap-Methode public void bubbleSort (Float [] A){ //1. Anpassen //... } public void swap(Float []A,int i, int j){ Float temp=A[i]; A[i]=A[j]; A[j]=temp; } Anpassung der temp- Variable

Java-Intensivkurs WS07/08 Folie 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 7 Generische Klassen class GenericBubbleSort { public void bubbleSort(T [] A){ for (int i=0;i<A.length;i++) { for(int j=A.length-1;j>=i+1;j--){ if (A[j].compareTo(A[j-1])<0){ swap(A, j, j-1); } } public void swap(T []A,int i, int j){ T temp=A[i]; A[i]=A[j]; A[j]=temp;}} wenn A[j]<A[j-1] Typparameter

Java-Intensivkurs WS07/08 Folie 8 Generische Klassen class BubbleSorter { public static void main(String[] args) { GenericBubbleSort bubbleSorter= new GenericBubbleSort (); bubbleSorter.bubbleSort(new Integer[]{-1,0,4,2,1,0,3}); }

Java-Intensivkurs WS07/08 Folie 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 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 { //class body } MyClass myClassObject=new MyClass (); TypeArgument ist eine Abstraktion eines nicht primitiven Datentyps

Java-Intensivkurs WS07/08 Folie 11 Generische Klassen GenericBubbleSort bubbleSorter= newGenericBubbleSort (); bubbleSorter.bubbleSort(new Integer[]{-1,0,4,2,1,0,3}); GenericBubbleSort bubbleSorter =new GenericBubbleSort (); bubbleSorter.bubbleSort(new Double[]{-1.2,0.2,- 4.01,2.1,1.2,0.5,3.4}); GenericBubbleSort bubbleSorter =new GenericBubbleSort (); bubbleSorter.bubbleSort(new String[]{"is","genrics","neu"}); //Sortierung von Integer-Zahlen //Sortierung von Double-Zahlen //Sortierung von Strings

Java-Intensivkurs WS07/08 Folie 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 class BubbleSortWithGenericMethods{ public > void bubbleSort(T [] A){ //gleiche Implementierung wie in GenericBubbleSort } //bubbleSort() ist nun generisch

Java-Intensivkurs WS07/08 Folie 13 Generische Methoden public > void swap(T []A,int i, int j){ //gleiche Implementierung wie in GenericBubbleSort } BubbleSortWithGenericMethods genricBubbleSorter4= new BubbleSortWithGenericMethods(); genricBubbleSorter4. bubbleSort(new Integer[] {-1,0,4,2,1,0,3}); genricBubbleSorter4. bubbleSort(new Double[] {-1.2,0.2,-4.01,2.1,1.2,0.5,3.4}); genricBubbleSorter4. bubbleSort(new String[] {"is","genrics","neu"}); Die Methode swap ist nun generisch

Java-Intensivkurs WS07/08 Folie 14 Generics s/GenericsPart1.html s/GenericsPart2.html

Java-Intensivkurs WS07/08 Folie 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 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 17 Das Collection-Interface //Collection-Interface Public interface Collection extends Iterable { int size(); boolean isEmpty(); boolean contains(Object o); Iterator iterator(); Object[] toArray(); T[] toArray(T[] a); boolean add(E e); boolean remove(Object o); boolean containsAll(Collection c); boolean addAll(Collection c); boolean removeAll(Collection c); boolean retainAll(Collection c); void clear(); boolean equals(Object o); int hashCode(); }

Java-Intensivkurs WS07/08 Folie 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 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 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 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 22 Listen Beispiele: ArrayList, Vector, Stack, und LinkedList //List-Interface interface List extends Collection { int size(); boolean isEmpty(); boolean contains(Object o); Iterator iterator(); Object[] toArray(); T[] toArray(T[] a); boolean add(E e); boolean remove(Object o); boolean containsAll(Collection c); boolean addAll(Collection c);... }

Java-Intensivkurs WS07/08 Folie 23 Listen //List-Interface interface List extends Collection {... boolean removeAll(Collection c); boolean retainAll(Collection c); void clear(); boolean equals(Object o); int hashCode(); E get(int index); E set(int index, E element); void add(int index, E element); E remove(int index); int indexOf(Object o); int lastIndexOf(Object o); ListIterator listIterator(); ListIterator listIterator(int index); List subList(int fromIndex, int toIndex); }

Java-Intensivkurs WS07/08 Folie 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 25 ArrayListen & Vector public class ArrayListSample { ArrayList physicalUnits = new ArrayList(); public ArrayListSample(){ physicalUnits.add("Joule"); physicalUnits.add("Pascal"); physicalUnits.add("Volt"); physicalUnits.add("Coulomb"); physicalUnits.add(null); physicalUnits.add("Volt"); physicalUnits.add("Ohm"); physicalUnits.add("Newton"); physicalUnits.add(1,"Celsius"); } //Listen können null- Referenzen //Ein Duplikat

Java-Intensivkurs WS07/08 Folie 26 LinkedList //Das Deque-Interface public interface Deque extends Queue { void addFirst(E e); void addLast(E e); boolean offerFirst(E e); boolean offerLast(E e); E removeFirst(); E removeLast(); E pollFirst(); E pollLast(); E getFirst(); E getLast(); E peekFirst(); E peekLast();

Java-Intensivkurs WS07/08 Folie 27 LinkedList //Das Deque-Interface boolean removeFirstOccurrence(Object o); boolean removeLastOccurrence(Object o); boolean add(E e); boolean offer(E e); E remove(); E poll(); E element(); E peek(); void push(E e); E pop(); boolean remove(Object o); boolean contains(Object o); public int size(); Iterator iterator(); Eine LinkedList ist eine doppelt verkettete Liste

Java-Intensivkurs WS07/08 Folie 28 LinkedList boolean add(E e) und boolean offer(E e): Fügen das Element e am Ende der Liste ein E remove() und E 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:

Java-Intensivkurs WS07/08 Folie 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 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 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 32 HashSet public class HashSetSample { Set hashSet=new HashSet(); public HashSetSample() { for(int i=5;i>=0;i--) hashSet.add(i*i); hashSet.add(3.5f); hashSet.add(null); } public static void main(String... args) { HashSetSample hashSetSample=new HashSetSample(); System.out.println(hashSetSample.hashSet); }} Ausgabe: [null, 0, 1, 16, 3.5, 4, 25, 9] null-Objekte sind erlaubt

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

Java-Intensivkurs WS07/08 Folie 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: interface SortedSet extends Set { Comparator comparator(); SortedSet subSet(E fromElement, E toElement); SortedSet headSet(E toElement); SortedSet tailSet(E fromElement); E first(); E last(); }

Java-Intensivkurs WS07/08 Folie 35 TreeSet public class TreeSetSample { TreeSet sortedSet = new TreeSet (); public TreeSetSample() { sortedSet.add(new Integer(2)); sortedSet.add(new Integer(7)); sortedSet.add(new Integer(1)); //sortedSet.add(null); sortedSet.add(new Integer(-1)); sortedSet.add(new Integer(0)); sortedSet.add(new Integer(-1)); sortedSet.add(new Integer(5)); } null-Objekte sind erlaubt

Java-Intensivkurs WS07/08 Folie 36 TreeSet public static void main(String... args) { TreeSetSample treeSetSample = new TreeSetSample(); System.out.print("sortedSet: "); for (Integer element : treeSetSample.sortedSet) System.out.print(element + " "); System.out.println(); System.out.println("sortedSet.first(): "+ treeSetSample.sortedSet.first()); System.out.println("sortedSet.last(): "+ treeSetSample.sortedSet.last()); System.out.println("sortedSet.subSet(-1, 5): "+ treeSetSample.sortedSet.subSet(-1, 5)); System.out.println("sortedSet.headSet(2): "+ treeSetSample.sortedSet.headSet(2)); System.out.println("sortedSet.tailSet(2): "+ treeSetSample.sortedSet.tailSet(2)); } Ausgabe: sortedSet: sortedSet.first(): -1 sortedSet.last(): 7 sortedSet.subSet(-1, 5): [-1, 0, 1, 2] sortedSet.headSet(2): [-1, 0, 1] sortedSet.tailSet(2): [2, 5, 7]

Java-Intensivkurs WS07/08 Folie 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 38 Tabellen (Maps) HashMap, HashTable, TreeMap und LinkedHashMap Sie alle implementieren das Map-Interface public interface Map { int size(); boolean isEmpty(); boolean containsKey(Object key); boolean containsValue(Object value); V get(Object key); V put(K key, V value); V remove(Object key); void putAll(Map m); void clear(); Set keySet(); Collection values();... }

Java-Intensivkurs WS07/08 Folie 39 Das Map-Interface public interface Map {... Set > entrySet(); interface Entry { K getKey(); V getValue(); V setValue(V value); boolean equals(Object o); int hashCode(); } boolean equals(Object o); int hashCode(); }

Java-Intensivkurs WS07/08 Folie 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 ersetzt Die Methode gibt dann den alten Wert des Schlüssels zurück Wenn der Schlüssel nicht vorhanden ist, gibt die Methode null zurück boolean containsKey(Object key): Gibt true zurück, wenn der Schlüssel in der Tabelle enthalten ist

Java-Intensivkurs WS07/08 Folie 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 keySet(): Gibt alle Schlüssel der Tabelle als Menge zurück Collection values(): Gibt eine Collection der Objekte in der Map zurück. In der Collection können Duplikate enthalten sein.

Java-Intensivkurs WS07/08 Folie 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 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 44 TreeMap public class TreeMapSample { Map treeMap=new TreeMap (); public TreeMapSample(){ treeMap.put("Energy", "Joule"); treeMap.put("Work", "Joule"); treeMap.put("Pressure", "Pascal"); treeMap.put("Voltage", "Volt"); treeMap.put("Frequency", "Hertz"); treeMap.put("Resistance", "Ohm"); //treeMap.put(null, "Unkown"); treeMap.put("Power", "Watt"); treeMap.put("Temperature", "Celsius"); treeMap.put("Conductance", "Siemens"); treeMap.put("Unknown", null);} null- Schlüssel sind nicht erlaubt null-Werte sind erlaubt

Java-Intensivkurs WS07/08 Folie 45 TreeMap public static void main(String[] args) { System.out.println("Sorted Map:"); TreeMapSample treeMapSample = new TreeMapSample(); for (String key : treeMapSample.treeMap.keySet()) System.out.println(key + ": "+treeMapSample.treeMap.get(key)); }} Ausgabe: Sorted Map: Conductance: Siemens Energy: Joule Frequency: Hertz Power: Watt Pressure: Pascal Resistance: Ohm Temperature: Celsius Unknown: null Voltage: Volt Work: Joule

Java-Intensivkurs WS07/08 Folie 46 LinkedHashMap LinkedHashMap merkt sich die Reihenfolge, in der die Schlüssel/Wert-Paare eingefügt werden public class MapSample { public java.util.Map linkedMap= new LinkedHashMap (); public java.util.Map treeMap= new TreeMap (); public java.util.Map hashMap= new HashMap (); public MapSample() { int key=11; while (key-->0) { linkedMap.put(key, key*key); treeMap.put(key, key*key); hashMap.put(key+"", key*key);}

Java-Intensivkurs WS07/08 Folie 47 LinkedHashMap public static void main(String... args) { MapSample mapSample=new MapSample(); System.out.print("Ordered Map:\t "); Iterator it=mapSample.linkedMap.keySet().iterator(); while (it.hasNext()) System.out.print(mapSample.linkedMap.get(it.next())+" "); System.out.println(); System.out.print("Sorted Map:\t "); it=mapSample.treeMap.keySet().iterator(); while (it.hasNext()) System.out.print(mapSample.treeMap.get(it.next())+" "); System.out.println(); System.out.print("Unordered Map:\t "); Iterator it2=mapSample.hashMap.keySet().iterator(); while (it2.hasNext()) System.out.print(mapSample.hashMap.get(it2.next())+" "); } Ausgabe: Ordered Map: Sorted Map: Unordered Map:

Java-Intensivkurs WS07/08 Folie 48 Collections-Übersicht CollectionArryListVector Linked- List Hash -Set Tree- Set Linked- Hash- Set Hash- MapHashtable Tree- Map Linked- Hash-Map Geordnetja nein janein ja Sortiertnein janein janein null-Schlüssel Ja neinJa null-Werteja neinja Indexzugriffja nein Implementier- ung von equals() erforderlichnein janein Implementieru ng von hashCode() erforderlichnein janeinja Synchronisiertneinjanein janein

Java-Intensivkurs WS07/08 Folie 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 List list=new ArrayList(); list.add(new Integer(5)); list.add("String-Object"); list.add(new Float(2.3f) ); Integer i=(Integer)list.get(0); s=(String)list.get(1); Float f=(Float)list.get(2); Casting erforderlich

Java-Intensivkurs WS07/08 Folie 50 Generische Collections Seit Version 5 sind alle Collection-Klassen und -Interfaces generisch und somit homogen Zugriffe auf Elemente erfordern kein Casting mehr: List list2=new ArrayList (); list2.add(new Integer(5)); list2.add(3); list2.add(new Integer(2) ); Integer ii= list2.get(0); Integer ss= list2.get(1); Integer ff= list2.get(2); Casting ist nicht erforderlich

Java-Intensivkurs WS07/08 Folie 51 Iteratoren (Iterator) Ein Iterator ist ein Objekt, das das java.util.Iterator-Interface implementiert Iteratoren bieten einen abstrakten Mechanismus zur Traversierung von Collections //Iterator-Interface interface Iterator { boolean hasNext(); E next(); void remove(); }

Java-Intensivkurs WS07/08 Folie 52 Iteratoren (Iterator) Ein Iterator hat einen Zeiger Wenn ein Iterator initialisiert wird, zeigt sein Zeiger auf das erste Element in der Sammlung boolean hasNext(): liefert genau dann true zurück, wenn die Sammlung nicht leer ist und der Zeiger nicht das Ende der Liste erreicht hat E next(): liefert das Objekt zurück, auf das der Iterator-Zeiger zeigt und bewegt anschließend den Zeiger zum nächsten Element Wenn der Zeiger beim letzten Element angelangt ist, liefern nachfolgende next()-Aufrufe null zurück Der Iterator kann dann nicht mehr verwendet werden

Java-Intensivkurs WS07/08 Folie 53 Iteratoren (Iterator) void remove(): ruft next() auf und entfernt ggf. das Element, das next() zurück liefert Das Collection-Interface verfügt über die Methode Iterator iterator(), die einen Iterator für die Collection zurück liefert Der Iterator liefert die Elemente seiner Collection in der Reihenfolge zurück, in der sie gespeichert sind

Java-Intensivkurs WS07/08 Folie 54 Iteratoren public class IteratorSample { public List list = new ArrayList (); public Set set = new HashSet (); public Map map = new HashMap (); public IteratorSample(){ int ii=0; for(int i=0; i<11; i++){ ii=i*i; list.add(ii); set.add(ii); map.put(i, ii); }

Java-Intensivkurs WS07/08 Folie 55 Iteratoren public static void main(String[] args) { IteratorSample is=new IteratorSample(); Iterator it=is.list.iterator(); System.out.print("List: "); while(it.hasNext()) System.out.print(it.next()+" "); System.out.println(); it=is.set.iterator(); System.out.print("Set: "); while(it.hasNext()) System.out.print(it.next()+" "); System.out.println(); it=is.map.keySet().iterator(); System.out.print("Map: "); while(it.hasNext()){ int key=it.next(); System.out.print("("+key+","+is.map.get(key)+") ");}}}

Java-Intensivkurs WS07/08 Folie 56 Iteratoren Zur Traversierung von Collections können auch for- each-Schleifen verwendet werden