16.2.3 | Implementierungen |
Tabelle 16.1 zeigt die im J2SDK 1.4 verfügbaren Implementierungen der Collection Interfaces.
Tabelle 16.1: Collection-Implementierungen in Java Klasse List Set SortedSet Map SortedMap JDK 1.0 LinkedList ArrayList Vector HashSet TreeSet HashMap WeakHashMap TreeMap Hashtable Kollektionen sind üblicherweise aus Performance-Gründen nicht synchronisiert. Greifen zwei Iteratoren nebenläufig auf eine Kollektion zu, wird eine ConcurrentModificationException ausgelöst. Hierdurch wird vermieden, dass ein inkonsistenter Zustand der Kollektion für einen zweiten Thread sichtbar wird. Iteratoren, die sich so verhalten, werden auch First-fail-Iteratoren genannt.
Im Paket java.util sind folgende neue Klassen enthalten, die direkt eines der Collection-Interfaces implementieren:Auch
- HashSet
implementiert das Set-Interface und speichert seine Elemente in einer Hashtable.- TreeSet
implementiert das SortedSet-Interface und speichert seine Elemente in einem Baum.- ArrayList
implementiert das List-Interface und speichert seine Elemente in einem Array.- LinkedList
implementiert das List-Interface und speichert seine Elemente in einer verketteten Liste. Werden die Elemente häufig durchlaufen, hat LinkedList eine bessere Performance als ArrayList.- HashMap
implementiert das Map-Interface und speichert seine Elemente in einer Hashtable.- WeakHashMap
implementiert das Map-Interface und speichert seine Elemente in einer Hashtable. Im Unterschied zu HashMap verwendet diese Klasse jedoch schwache Referenzen zur Speicherung der Schlüssel. Wird der Schlüssel außerhalb der WeakHashMap nicht mehr referenziert, so wird das entsprechende Schlüssel-Wert-Paar automatisch vom Garbage-Collector entfernt.- TreeMap
implementiert das SortedMap-Interface und speichert seine Elemente in einem Baum.die beiden Klassen Vector und Hashtable sind seit dem JDK 1.2 Implementierungen der Collection-Interfaces (List bzw. Map). Beide Klassen sind bereits seit der Version 1.0 im JDK enthalten und wurden nachträglich an das Collection-Framework angepasst. Aus diesem Grund sind sie nicht ganz mit obigen Implementierungen gleichzustellen. Zum einen besitzen diese Klassen zusätzlich zu den Methoden der Collection-Interfaces weitere Methoden zum Datenzugriff, die bereits aus historischen Gründen vorhanden waren, zum anderen ist der Zugriff sowohl auf Vector als auch auf Hashtable bereits synchronisiert. Synchronisierte Varianten der oben beschriebenen neuen Implementierungen muss man explizit über die im nächsten Abschnitt beschriebenen Wrapper-Implementierungen anfordern.