java.util.

Werbung
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
Herunterladen