The Collection Framework


Make appropriate selection of collection classes/interfaces to suit specified behavior requirements.

Im Package java.util gibt es verschiedene Klassen und Interfaces, die die Sammlung von Objekten in einer Gruppe zusammenfasst. Mit den Klassen und Interfaces kann man sie in diese Gruppen speichern, verändern und wieder auslesen.

Einfache Collection:
Bei den einfachen Collection gibt es keine Einschränkungen bezüglich des Typs des Elementes und Reihenfolge der Elemente. Sie werden auch bag oder multiset genannt.
Diese Collection Interface wird meistens von den anderen Containerklassen (Set oder List) implementiert.
Collection-Methoden
Set-Interface:
wird abgeleitet von Collection-Interface, erbt dementsprechend die Methoden. Ist ebenfalls unsortiert. Der grösste Unterschied ist, dass in diesem Container keine doppelten Einträge vorhanden sind. "NULL" darf in diesem Container vorhanden sein, aber nur einmal. Set benutzt die gleichen Methoden wie das Collection-Interface.
Implementierende Klassen sind:
SortedSet:
implementiert Set-Interface. In diesem Set sind die Elemente sortiert, d. h. die Iterator-Methode gibt ein Objekt zurück, mit dem über die Elemente in sortierte Reihenfolge iteriert werden kann. Zusätzlich gibt es die Methoden first() und last(), mit denen das erste bzw. das letzte Element abgefragt werden kann.

HashSet
implementiert ebenfalls Set-Interface, aber mit dem Unterschied, dass eine interne Hashtabelle verwendet wird. Die Methoden add()(einfügen), remove()(löschen) und contains()(Zugriff) sind effizienter als SET. Die Elemente sind aber wie bei Set-Interface ungeordnet.

TreeSet-Klasse
Diese Klasse implementiert SortedSet. In dieser Klasse sind die Elemente in aufsteigender Reihenfolge sortiert. Die Methoden add(), remove() und contains() sind effizienter.

List-Interface:
wird abgeleitet von Collection-Interface, erbt dementsprechend die Methoden. Die Elemente im List-Container sind geordnet. Es können doppelte Einträge vorhanden sein. Auf die Elemente kann über deren Index zugegriffen werden. Wie bei den Arrays ist hat das erste Element den Index 0 und das letzte Element size()-1.
Mit der Methode get() kann man ein bestimmtes Element an der angegebenen Position erfragen und mit der Methode set() setzen.
Mit den Methoden add() bzw. addAll() kann man Elemente am Ende der Liste einfügen. Diese Methoden, mit Index als Argument, fügen Elemente an den angegebenen Positionen ein.
Implementierende Klassen sind:
ArrayList
implementiert das List-Interface als Array von Elementen. Das Array wird bei Bedarf neu erzeugt, wenn das Array grösser wird. Die Methoden get() und set() sind effizienter.

LinkedList
implementiert das Interface List. Die Elemente werden als doppelt verkettete Liste gehalten. Die Methoden get() und set() sind nicht so effizienter als ArrayList, dafür sind aber die add() und remove()-methoden effizienter.

Map-Interface
Dieses Interface repräsentiert eine Ansammlung von Schlüssel-Werte-Paar-Objekten. Das heisst zu einem Schlüssel gibt es ein korrespondierendes Wertobjekt. Sowohl Schlüssel als auch Wert sind Objekte. Zu einem Schlüssel gibt es entweder kein Wert oder ein Wert. Ein Schlüssel kann nur einmal vorhanden sein. Für die Wertobjekte gibt es in dieser Hinsicht keine Einschränkungen. Beispiele für Map-Objekte sind Hashtables und assoziative Arrays. Map ist keine Collection, trotzdem gilt das Map-Interface als integraler Bestandteil von Java-Container-Framework.

Map-Methoden
HashMap
Diese Klasse implementiert das Map-Interface unter Verwendung einer Hashtable. Die Methoden get() und put() sind sehr effizienter als bei Map. HashMap erlaubt null als Schlüssel.

SortedMap
Dieses Interface implementiert ein Map-Objekt. Die Schlüsselobjekte sind in einer sortierten Reihenfolge. Dieses Interface ist wie SortedSet aufgebaut.

TreeMap
Diese Klasse implementiert das Interface SortedMap. Sie ist wie TreeSet aufgebaut. Die Methoden keySet und entrySet liefern Collections, deren Iteratoren ihre Elemente in aufsteigender Reihenfolge abliefern.

nach oben

Distinguish between correct and incorrect implementations of hashcode methods.

hashCode berechnet einen numerischen Wert, der als Schlüssel zur Speicherung eines Objekts in einer Hashtable verwendet werden kann. Jede Instanz von einem Objekt kann diese Methode aufrufen. Die Object-Implementation von hashCode() wandelt die Speicher-Adresse in ein Integer um. Die Methode sieht wie folgt aus:
public int hashCode()
Hier ist zu beachten, dass die Methode keine Argumente nimmt und dass der Rückgabewert ein int-Wert ist.
Wenn zwei Objekte, im Sinne der Methode equals(), gleich sind, so liefern beide Objekte den gleichen int-Wert zurück.

Valid XHTML 1.1! Valid CSS!