Collections und Maps
Collection Interface
Collections werden verwendet, um Elemente hinzuzufügen um diese später wieder zu suchen, oder Operationen auf allen
Elementen durchzuführen.
Die wichtigesten Methoden sind
add(),
contains(),
remove() and
size().
Daneben gibt es eine Methode iterator(), die ein Objekt zurückgibt, mit dem
bequem über alle Elemente iteriert werden kann.
Beispiel:
Collection col = ...;
Iterator it = col.iterator();
while(it.hasNext()) {
Object obj = it.next();
// do something with "obj"
}
Seit dem JDK 1.5 kann obiger Code kürzer wie folgt geschrieben werden:
Collection col = ...;
for(Object obj : col) { // The compiler uses the iterator()-Method
// do something with "obj"
}
- Collection
- Interface, das alle Collections implementieren müssen.
- List
- Die Elemente sind geordnet, d. h. so, wie sie eingefügt werden.
- ArrayList
- Auf die Elemente kann via Index zugegriffen werden. Das Einfügen in der Mitte oder am Anfang ist sehr Zeit aufwändig.
- LinkedList
- Geordnete Sequenz, bei der am Anfang und am Ende hinzugefügt, abgeholt und gelöscht werden kann.
Somit kann eine LinkedList auch als Queue, DQueue oder Stack verwendet werden. Das Einfügen in der Mitte geht rasch.
- Vector
- Alte Version der ArrayList.
- Set
- Set = Menge: Elemente können nur einmal angefügt werden.
- HashSet
- Set, der mit einer Hash-Tabelle Elemente einfügt und wieder finden kann. Es entspricht etwa einer
HashMap, bei der aber nur Keys und keine Values eingefügt werden.
- SortedSet, TreeSet
- Set, der die Elemente sortiert. Bei der Implmentation TreeSet
wird ein Baum als abstrakten Datentypen eingesetzt. Die compareTo() funktion wird verwendet,
um Elemente an die richtige Poisition einzufügen.
Map Interface
Maps haben im Gegensatz zu Collections keine add()-Methode,
hingegen eine put(key,value)-Methode. Datenobjekte stehen immer in Beziehung zu einem
Schlüsselobjekt.
- Map
- Interface mit den wichtigen Methoden
put(key, value),
containsKey(key),
containsValue(value),
get(key) : value,
remove(key) und
size().
Zum Iterieren werden die beiden Methoden keySet() und values()
verwendet, welche die Schlüssel bzw. die Datenobjkete zurückgeben.
- HashMap
- Klassische assoziative Arrays. Bei assoziativen Arrays sind die Indizes nicht Zahlen, sondern beliebige
Schlüsselobjekte.
- LinkedHashMap
- Wie die Hashmap, jedoch wird zusätzlich eine Liste geführt, in welcher Reihenfolge die Objekte
hinzugefügt wurden.
- Hashtable
- JDK 1.1 Version der HashMap.
- WeakHashMap
- Ojbekte dürfen bei nichtgebrauch vom Garbage Collector vernichtet werden.
- SortedMap, TreeMap
- Wie SortedSet bzw. TreeSet.
Im Gegensatz zu diesen obengenannten Objekten arbeiten die Maps
auf den Schlüsseln und nicht auf den Datenobjekten.
Auffinden der richtigen Sammlung
Ist ein schneller Zugriff über Schlüsselobjekte nötig
Dürfen länger nicht benutzte Objekte vom Garbage Collector abgeräumt werden?
Ist die Reihenfolge der Objekte relevant?
Werden nur ab und zu, bzw. beim Initialisieren Daten hinzugefügt bzw. entfernt?
Gibt es eine natürliche Ordnung (z. B. alphabetisch) auf den Daten bzw. auf den Schlüsseln?
Kann jedes Objekt nur einmal gespeichert werden? (Duplikate sind nicht gestattet.)