Literatur

HashSet

Eine gängige Mengen-Klasse, die das Interface Set implementiert, ist die Klasse HashSet (java.util.HashSet). Die Elemente werden in einer Hash-Tabelle gespeichert, wodurch ein schneller Zugriff möglich ist.

Beispiel:

HashSet set = new HashSet();
set.add("Hallo");
set.add("Welt!");
set.add("Welt!"); // Wird nicht nochmal hinzugefügt!

Der dritte Aufruf der Methode add führt nicht zu einem weiteren Hinzufügen des Strings "Welt!", da dieser schon vorhanden ist.

In der Klasse HashSet gibt es keine Methode, um auf ein Objekt innerhalb des Sets auf direktem Wege zuzugreifen. Um dies zu realisieren, benötigen wir einen sogenannten Iterator. Ein Iterator ist ein Zeiger, mit dem man eine Datenstruktur iterieren (schrittweise durchlaufen) kann. Einen Iterator bekommen wir, indem wir die Methode iterator aufrufen.

Das Interface Iterator hat folgende Methoden:

public boolean hasNext()
public E next()
public void remove()

Die Methode hasNext überprüft, ob ein weiteres Objekt in unserem HashSet vorhanden ist. Der Iterator "läuft" mit der Methode next zum nächsten Objekt und gibt dieses auch zurück. Die Methode remove entfernt das zuletzt "besuchte" Objekt. Möchte man z.B. ein HashSet zweimal durchsuchen, so muss man für jeden neuen Durchlauf einen neuen Iterator anfordern, da der Iterator nur "vorwärts" gehen kann und, sobald er am Ende angelangt ist, nicht selbst zurückgesetzt werden kann.

Nachfolgend sehen Sie nun ein Beispiel für die Verwendung eines Iterators mit unserer oben definierten HashSet set:

// Iterator wird angefordert
Iterator it = set.iterator();
// HashSet wird mit dem Iterator durchlaufen
while (it.hasNext())
{
        // Next gibt das aktuelle HashSet-Objekt zurück 
        // und geht zum nächsten über
        String setText = (String) it.next();
        // Ausgabe des jeweiligen HashSet-Elementes
        System.out.println(setText);
}