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,List,Set,ArrayList,LinkedList,HashSet,SortedSet,Vector,TreeSet
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,HashMap,SortedMap,TreeMap,LinkedHashMap,WeakHashMap,Hashtable
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.)