java.util. java.util.* Sebastian Draack Department Informations- und Elektrotechnik Department Informations- und Elektrotechnik JAVA Collection-API Sebastian Draack 1 java.util. Sebastian Draack Department Informations- und Elektrotechnik Collection-API • • • • • • • • • • • Begriffe Einleitung, Motivation Iterator Comparator Interfaces Abstrakte Klassen Konkrete Klassen Utility-Klassen Beispiele Zusammenfassung Fragen 2 java.util. Sebastian Draack Department Informations- und Elektrotechnik Begriffe • • Collection: Kollektion, Sammlung API: Application Programming Interface (Programmierschnittstelle) 3 java.util. Sebastian Draack Department Informations- und Elektrotechnik Speichern von Daten • • • • • Variablen Arrays Strukturen (C) Objekte Container / Collections int, float, double int[], float[], double[] struct public class ? 4 java.util. Sebastian Draack Department Informations- und Elektrotechnik Strukturieren von Daten • Effektive Algorithmen benötigen strukturierte Daten 5 java.util. Sebastian Draack Compare • • Comparable Comparator Eclipse Beispiel Department Informations- und Elektrotechnik public interface Comparable<T> { int compareTo(T o); } public interface Comparator<T> { int compare(T o1, T o2); } 6 java.util. Sebastian Draack Iterate • • Iterable Iterator Department Informations- und Elektrotechnik public interface Iterator<E> { boolean hasNext(); E next(); void remove(); //optional } public interface ListIterator<E> extends Iterator boolean hasNext(); E next(); List<String> list = new LinkedList<String>(); boolean hasPrevious(); list.add("..."); E previous(); … int nextIndex(); Iterator<String> it = stringList.iterator(); int previousIndex(); while (it.hasNext()) void remove(); //optional { void set(E e); //optional String str = it.next(); void add(E e); //optional System.out.println("String: "+ str); } } 7 Eclipse Beispiel java.util. Sebastian Draack Department Informations- und Elektrotechnik Collection API - Übersicht Handout + 8 Quelle: http://en.wikibooks.org/wiki/File:Java_collection_implemen java.util. Sebastian Draack Department Informations- und Elektrotechnik Interfaces • • • • Collection List Set Map 9 java.util. Sebastian Draack Interface Collection • Optionale Methoden werfen ggf. OperationNotSupportedExceptions Department Informations- und Elektrotechnik public interface Collection<E> extends Iterable<E> { // Basic operations int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); //optional boolean remove(Object element); //optional Iterator<E> iterator(); // Bulk operations boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c); //optional boolean removeAll(Collection<?> c); //optional boolean retainAll(Collection<?> c); //optional void clear(); //optional // Array operations Object[] toArray(); <T> T[] toArray(T[] a); 10 } java.util. Sebastian Draack Interface List • Optionale Methoden werfen ggf. OperationNotSupportedExceptions Department Informations- und Elektrotechnik public interface List<E> extends Collection<E> { // Basic operations E get(int index); E set(int index, E element); //optional boolean add(E element); //optional void add(int index, E element); //optional E remove(int index); //optional boolean addAll(int index, Collection<? extends E> c); //optional // Search int indexOf(Object o); int lastIndexOf(Object o); // Iteration ListIterator<E> listIterator(); 11 java.util. Sebastian Draack Interface Set • Optionale Methoden werfen ggf. OperationNotSupportedExceptions Department Informations- und Elektrotechnik public interface Set<E> extends Collection<E> { // Basic operations int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); //optional boolean remove(Object element); //optional Iterator<E> iterator(); // Bulk operations boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c); //optional boolean removeAll(Collection<?> c); //optional boolean retainAll(Collection<?> c); //optional void clear(); //optional // Array Operations Object[] toArray(); <T> T[] toArray(T[] a); 12 } java.util. Sebastian Draack Interface Map • Optionale Methoden werfen ggf. OperationNotSupportedExceptions Department Informations- und Elektrotechnik public interface Map<K,V> { // Basic operations V put(K key, V value); V get(Object key); V remove(Object key); boolean containsKey(Object key); boolean containsValue(Object value); int size(); boolean isEmpty(); // Bulk operations void putAll(Map<? extends K, ? extends V> m); void clear(); // Collection Views public Set<K> keySet(); public Collection<V> values(); public Set<Map.Entry<K,V>> entrySet(); // Interface for entrySet elements public interface Entry { K getKey(); V getValue(); V setValue(V value); } 13 } java.util. Sebastian Draack Department Informations- und Elektrotechnik Interface Queue • public interface Queue<E> extends Collection<E> { E element(); boolean offer(E e); E peek(); E poll(); E remove(); } FIFO-Prinzip Mit Exception Null statt Exception enqueue add() offer() dequeue element() peek() delete remove() poll() 14 java.util. Sebastian Draack Department Informations- und Elektrotechnik Interface Deque • • FIFO-Prinzip & LIFO-Prinzip Mit Exception Null statt Exception enqueue addFirst/Last() offerFirst/Last() dequeue getFirst/Last() peekFirst/Last() delete removeFirst/Last() pollFirst/Last() public interface Queue<E> extends Collection<E> { boolean add(E e); void addFirst(E e); void addLast(E e); boolean contains(Object o); Iterator<E> descendingIterator(); E element(); E getFirst(); E getLast(); Iterator<E> iterator(); boolean offer(E e); boolean offerFirst(E e); boolean offerLast(E e); E peek(); E peekFirst(); E peekLast(); E poll(); E pollFirst(); E pollLast(); E pop(); E push(); E remove(); … int size(); } 15 java.util. Sebastian Draack Department Informations- und Elektrotechnik Abstrakte Implementierungen • • • • • • AbstractCollection AbstractSet AbstractList AbstractSequentialList AbstractMap AbstractQueue 16 java.util. Sebastian Draack Department Informations- und Elektrotechnik AbstractCollection Implementierung import java.util.Iterator; public class ClassName extends java.util.AbstractCollection<E>{ @Override public Iterator<E> iterator() { // TODO Auto-generated method stub return null; } @Override public int size() { // TODO Auto-generated method stub return 0; } } 17 java.util. Sebastian Draack Department Informations- und Elektrotechnik AbstractSet Implementierung import java.util.Iterator; public class ClassName extends java.util.AbstractSet<E>{ @Override public Iterator<E> iterator() { // TODO Auto-generated method stub return null; } @Override public int size() { // TODO Auto-generated method stub return 0; } } 18 java.util. Sebastian Draack Department Informations- und Elektrotechnik AbstractList Implementierung public class ClassName extends java.util.AbstractList<E> { @Override public E get(int arg0) { // TODO Auto-generated method stub return null; } @Override public int size() { // TODO Auto-generated method stub return 0; } } 19 java.util. Sebastian Draack Department Informations- und Elektrotechnik AbstractSequentialList Implementierung import java.util.ListIterator; public class ClassName extends java.util.AbstractSequentialList<E>{ @Override public ListIterator<E> listIterator(int index) { // TODO Auto-generated method stub return null; } @Override public int size() { // TODO Auto-generated method stub return 0; } } 20 java.util. Sebastian Draack Department Informations- und Elektrotechnik AbstractMap Implementierung import java.util.Set; public class ClassName extends java.util.AbstractMap<K, V>{ @Override public Set<java.util.Map.Entry<K, V>> entrySet() { // TODO Auto-generated method stub return null; } } 21 java.util. Sebastian Draack Department Informations- und Elektrotechnik AbstractQueue Implementierung 22 java.util. Sebastian Draack Department Informations- und Elektrotechnik Collection API Classes I ArrayList Listen (List) LinkedList HashSet Mengen (Set) TreeSet LinkedHashSet Implementiert Listen-Funktionalität durch die Abbildung auf ein Feld; implementiert die Schnittstelle List. LinkedList ist eine doppelt verkettete Liste, also eine Liste von Einträgen mit einer Referenz auf den jeweiligen Nachfolger und Vorgänger. Das ist nützlich beim Einfügen und Löschen von Elementen an beliebigen Stellen innerhalb der Liste. Eine Implementierung der Schnittstelle Set durch ein schnelles Hash-Verfahren. Implementierung von Set durch einen Baum, der alle Elemente sortiert hält. Eine schnelle MengenImplementierung, die sich parallel auch die Reihenfolge der eingefügten Elemente merkt. 23 java.util. Sebastian Draack Department Informations- und Elektrotechnik Collection API Classes I ArrayList Listen (List) LinkedList HashSet Mengen (Set) TreeSet LinkedHashSet Implementiert Listen-Funktionalität durch die Abbildung auf ein Feld; implementiert die Schnittstelle List. LinkedList ist eine doppelt verkettete Liste, also eine Liste von Einträgen mit einer Referenz auf den jeweiligen Nachfolger und Vorgänger. Das ist nützlich beim Einfügen und Löschen von Elementen an beliebigen Stellen innerhalb der Liste. Eine Implementierung der Schnittstelle Set durch ein schnelles Hash-Verfahren. Implementierung von Set durch einen Baum, der alle Elemente sortiert hält. Eine schnelle MengenImplementierung, die sich parallel auch die Reihenfolge der eingefügten Elemente merkt. 24 java.util. Sebastian Draack Department Informations- und Elektrotechnik Collection API Classes I ArrayList Listen (List) LinkedList HashSet Mengen (Set) TreeSet LinkedHashSet Implementiert Listen-Funktionalität durch die Abbildung auf ein Feld; implementiert die Schnittstelle List. LinkedList ist eine doppelt verkettete Liste, also eine Liste von Einträgen mit einer Referenz auf den jeweiligen Nachfolger und Vorgänger. Das ist nützlich beim Einfügen und Löschen von Elementen an beliebigen Stellen innerhalb der Liste. Eine Implementierung der Schnittstelle Set durch ein schnelles Hash-Verfahren. Implementierung von Set durch einen Baum, der alle Elemente sortiert hält. Eine schnelle MengenImplementierung, die sich parallel auch die Reihenfolge der eingefügten Elemente merkt. 25 java.util. Sebastian Draack Department Informations- und Elektrotechnik Collection API Classes I ArrayList Listen (List) LinkedList HashSet Mengen (Set) TreeSet LinkedHashSet Implementiert Listen-Funktionalität durch die Abbildung auf ein Feld; implementiert die Schnittstelle List. LinkedList ist eine doppelt verkettete Liste, also eine Liste von Einträgen mit einer Referenz auf den jeweiligen Nachfolger und Vorgänger. Das ist nützlich beim Einfügen und Löschen von Elementen an beliebigen Stellen innerhalb der Liste. Eine Implementierung der Schnittstelle Set durch ein schnelles Hash-Verfahren. Implementierung von Set durch einen Baum, der alle Elemente sortiert hält. Eine schnelle MengenImplementierung, die sich parallel auch die Reihenfolge der eingefügten Elemente merkt. 26 java.util. Sebastian Draack Department Informations- und Elektrotechnik Collection API Classes I ArrayList Listen (List) LinkedList HashSet Mengen (Set) TreeSet LinkedHashSet Implementiert Listen-Funktionalität durch die Abbildung auf ein Feld; implementiert die Schnittstelle List. LinkedList ist eine doppelt verkettete Liste, also eine Liste von Einträgen mit einer Referenz auf den jeweiligen Nachfolger und Vorgänger. Das ist nützlich beim Einfügen und Löschen von Elementen an beliebigen Stellen innerhalb der Liste. Eine Implementierung der Schnittstelle Set durch ein schnelles Hash-Verfahren. Implementierung von Set durch einen Baum, der alle Elemente sortiert hält. Eine schnelle MengenImplementierung, die sich parallel auch die Reihenfolge der eingefügten Elemente merkt. 27 java.util. Sebastian Draack Department Informations- und Elektrotechnik Collection API Classes II HashMap Implementiert einen assoziativen Speicher durch ein Hash-Verfahren. TreeMap Exemplare dieser Klasse halten ihre Elemente in einem Binärbaum sortiert; implementiert NavigableMap. LinkedHashMap Ein schneller Assoziativspeicher, der sich parallel auch die Reihenfolge der eingefügten Elemente merkt. Assoziativspeicher (Map) WeakHashMap LinkedList Schlange (Queue) Verwaltet Elemente mit schwachen Referenzen, sodass die Laufzeitumgebung bei Speicherknappheit Elemente entfernen kann. Die verkettete Liste implementiert Queue und auch Deque. ArrayBlockingQueue Eine blockierende Warteschlange. PriorityQueue Prioritätswarteschlange. 28 java.util. Sebastian Draack Department Informations- und Elektrotechnik Collection API Classes II HashMap Implementiert einen assoziativen Speicher durch ein Hash-Verfahren. TreeMap Exemplare dieser Klasse halten ihre Elemente in einem Binärbaum sortiert; implementiert NavigableMap. LinkedHashMap Ein schneller Assoziativspeicher, der sich parallel auch die Reihenfolge der eingefügten Elemente merkt. Assoziativspeicher (Map) WeakHashMap LinkedList Schlange (Queue) Verwaltet Elemente mit schwachen Referenzen, sodass die Laufzeitumgebung bei Speicherknappheit Elemente entfernen kann. Die verkettete Liste implementiert Queue und auch Deque. ArrayBlockingQueue Eine blockierende Warteschlange. PriorityQueue Prioritätswarteschlange. 29 java.util. Sebastian Draack Department Informations- und Elektrotechnik Collection API Classes II HashMap Implementiert einen assoziativen Speicher durch ein Hash-Verfahren. TreeMap Exemplare dieser Klasse halten ihre Elemente in einem Binärbaum sortiert; implementiert NavigableMap. LinkedHashMap Ein schneller Assoziativspeicher, der sich parallel auch die Reihenfolge der eingefügten Elemente merkt. Assoziativspeicher (Map) WeakHashMap LinkedList Schlange (Queue) Verwaltet Elemente mit schwachen Referenzen, sodass die Laufzeitumgebung bei Speicherknappheit Elemente entfernen kann. Die verkettete Liste implementiert Queue und auch Deque. ArrayBlockingQueue Eine blockierende Warteschlange. PriorityQueue Prioritätswarteschlange. 30 java.util. Sebastian Draack Department Informations- und Elektrotechnik Collection API Classes II HashMap Implementiert einen assoziativen Speicher durch ein Hash-Verfahren. TreeMap Exemplare dieser Klasse halten ihre Elemente in einem Binärbaum sortiert; implementiert NavigableMap. LinkedHashMap Ein schneller Assoziativspeicher, der sich parallel auch die Reihenfolge der eingefügten Elemente merkt. Assoziativspeicher (Map) WeakHashMap LinkedList Schlange (Queue) Verwaltet Elemente mit schwachen Referenzen, sodass die Laufzeitumgebung bei Speicherknappheit Elemente entfernen kann. Die verkettete Liste implementiert Queue und auch Deque. ArrayBlockingQueue Eine blockierende Warteschlange. PriorityQueue Prioritätswarteschlange. 31 java.util. Sebastian Draack Department Informations- und Elektrotechnik Collection API Classes II HashMap Implementiert einen assoziativen Speicher durch ein Hash-Verfahren. TreeMap Exemplare dieser Klasse halten ihre Elemente in einem Binärbaum sortiert; implementiert NavigableMap. LinkedHashMap Ein schneller Assoziativspeicher, der sich parallel auch die Reihenfolge der eingefügten Elemente merkt. Assoziativspeicher (Map) WeakHashMap LinkedList Schlange (Queue) Verwaltet Elemente mit schwachen Referenzen, sodass die Laufzeitumgebung bei Speicherknappheit Elemente entfernen kann. Die verkettete Liste implementiert Queue und auch Deque. ArrayBlockingQueue Eine blockierende Warteschlange. PriorityQueue Prioritätswarteschlange. 32 java.util. Sebastian Draack Department Informations- und Elektrotechnik Collection API Classes II HashMap Implementiert einen assoziativen Speicher durch ein Hash-Verfahren. TreeMap Exemplare dieser Klasse halten ihre Elemente in einem Binärbaum sortiert; implementiert NavigableMap. LinkedHashMap Ein schneller Assoziativspeicher, der sich parallel auch die Reihenfolge der eingefügten Elemente merkt. Assoziativspeicher (Map) WeakHashMap LinkedList Schlange (Queue) Verwaltet Elemente mit schwachen Referenzen, sodass die Laufzeitumgebung bei Speicherknappheit Elemente entfernen kann. Die verkettete Liste implementiert Queue und auch Deque. ArrayBlockingQueue Eine blockierende Warteschlange. PriorityQueue Prioritätswarteschlange. 33 java.util. Sebastian Draack Department Informations- und Elektrotechnik Collection API Classes II HashMap Implementiert einen assoziativen Speicher durch ein Hash-Verfahren. TreeMap Exemplare dieser Klasse halten ihre Elemente in einem Binärbaum sortiert; implementiert NavigableMap. LinkedHashMap Ein schneller Assoziativspeicher, der sich parallel auch die Reihenfolge der eingefügten Elemente merkt. Assoziativspeicher (Map) WeakHashMap LinkedList Schlange (Queue) Verwaltet Elemente mit schwachen Referenzen, sodass die Laufzeitumgebung bei Speicherknappheit Elemente entfernen kann. Die verkettete Liste implementiert Queue und auch Deque. ArrayBlockingQueue Eine blockierende Warteschlange. PriorityQueue Prioritätswarteschlange. 34 java.util. Sebastian Draack Department Informations- und Elektrotechnik Synchronisiert? 35 java.util. Sebastian Draack Department Informations- und Elektrotechnik Interfaces & Implementierungen (General-Purpose) Interface Implementierung Tree Hastable Hashtable + LinkedList Set TreeSet HashSet LinkedHashSet Map TreeMap HashMap LinkedHashMap List Queue Array List ArrayList LinkedList LinkedList 36 java.util. Sebastian Draack Department Informations- und Elektrotechnik Interfaces & Implementierungen (General-Purpose) Implementierung Vorteile / schnell Nachteile / langsam Anmerkungen ArrayList Lesen [O(1)] Löschen, Einfügen [O(n)] Einfach zu implementieren LinkedList Einfügen, Löschen [O(1)] Lesen [O(n)] Einfach zu implementieren TreeSet Standard-Operationen [O(log n)] TreeMap Standard-Operationen [O(log n)] HashSet Standard-Operationen [O(1)] Keine garantierte Ordnung, dyn. Erweiterung Assoziativ HashMap Standard-Operationen [O(1)] Linked… Iterierung über EinfügeReihenfolge Assoziativ 37 java.util. Sebastian Draack Department Informations- und Elektrotechnik Wie bitte? 38 java.util. Sebastian Draack Department Informations- und Elektrotechnik Hashing Balanced Trees 39 java.util. Sebastian Draack Department Informations- und Elektrotechnik Legacy Implementations • • Vector Hashtable 40 java.util. Sebastian Draack Department Informations- und Elektrotechnik Legacy Implementations • • Vector Hashtable Altlasten 41 java.util. Sebastian Draack Department Informations- und Elektrotechnik Special Purpose Implementations • • WeakHashMap IdentityHashMap 42 java.util. Sebastian Draack Department Informations- und Elektrotechnik Special Purpose Implementations • • WeakHashMap (Wenn keine Referenz auf Value: Garbage Collection) IdentityHashMap (Kann enthalten: Mehrere Objekte die „equal“, aber nicht „==“ sind.) Spezielle Zwecke 43 java.util. Sebastian Draack Department Informations- und Elektrotechnik Utility-Klasse Collections • Ausschließlich statische Methoden Collections.sort(List<T> list) // Sortieren Collections.shuffle(List<?> list) // Mischen Collectins.binarySearch(List<? extends Comparable<? super T>> list, T key) // Binaere Suche benoetigt Sortierung Collections.reverse(List<T> list) // Umkehren Collections.swap(List<?> list, int i, int j) // Tauschen Collections.frequency(Collection<?> c, Object o) // Zaehlen Collections.disjoint(Collection<?> c1, Collection<?> c2) // Schnittmenge Collections.min(Collection<?> coll), Collectins.max(Collection<?> coll) // Extrema Collections.replaceAll(List<T> list, T oldVal, T newVal) // Ersetzen 44 java.util. Sebastian Draack Department Informations- und Elektrotechnik Utility-Klasse Arrays • Ausschließlich statische Methoden Arrays.sort(T[] a, Comparator <? super T> c) // Sortierung mittels Comparator Arrays.asList(T... a); // Konvertierung in Liste ... http://docs.oracle.com/javase/7/docs/api/index.html 45 java.util. Sebastian Draack Department Informations- und Elektrotechnik Beispiel Threads 46 java.util. Sebastian Draack Department Informations- und Elektrotechnik Zusammenfassung 47 java.util. Sebastian Draack Department Informations- und Elektrotechnik Fragen • … 48 java.util. Sebastian Draack Department Informations- und Elektrotechnik Quellen • • • • • http://download.oracle.com/javase/1.4.2/docs/guide/collections/reference.html http://docs.oracle.com/javase/7/docs/api/index.html http://www.cs.hs-rm.de/~reith/lehre/ads07/assets/jcf_tf_20070615.pdf http://openbook.galileocomputing.de/javainsel/ http://en.wikibooks.org/wiki/Java_Programming/Collection_Classes#Set_or_List_or_Queue Abbildungen • http://cdn.tentblogger.com/wp-content/uploads/2011/04/to-do-list-pad.jpeg • http://ganzezahlen.interaktiv-lernen.net/menge_z/images/menge_z_diagr.gif • http://www.schwellenpaedagogik.de/wp-content/uploads/2008/07/old-world-map.jpg • http://www.stilgeschenk.de/wp-content/uploads/2009/03/werkzeug.jpeg • http://www.fredolin.de/img/telefonbuch.jpg • http://www.logismarket.ch/ip/denios-modul-container-modul-container-328333-FGR.jpg • http://en.wikibooks.org/wiki/File:Java_collection_implementation.jpg Internetquellen: Verfügbarkeit geprüft am 27.11.2011 um 15:45 Uhr 49 java.util. Sebastian Draack Department Informations- und Elektrotechnik Vielen Dank für Ihre Aufmerksamkeit. 50