TreeSet

Ein TreeSet stellt eine sortierte, navigierbare Menge an Objekten dar, in der jedes Element nur ein Mal vorkommt.

Im folgenden Beispiel wird ein TreeSet deklariert, dem anschließend sieben String-Objekte mittels add() hinzugefügt werden, der String Karl sogar zwei Mal. Durch einen Iterator wird das Set dann innerhalb einer for-Schleife durchlaufen, ausgelesen und der jeweilige Wert ausgegeben. Hier erscheint Karl nur ein Mal.
Die Methode size() liefert die Größe des Sets und gibt erwartungsgemäß 6 aus, da der String Karl nicht doppelt im TreeSet vorkommen darf.

TreeSet<String> ts = new TreeSet<String>();
ts.add("Willi");
ts.add("Paul");
ts.add("Heinz");
ts.add("Anton");
ts.add("Karl");
ts.add("Karl");
ts.add("Achim");

for (Iterator<String> it = ts.iterator(); it.hasNext();) {
     System.out.println(it.next());
}
System.out.println("Größe: " + ts.size()); // 6

TreeSet kann beliebige sortierbare Objekte speichern, bei denen jedoch die folgende Bedingung erfüllt sein muss: Werden zwei im Set enthaltene Elemente e1 und e2, von einem Comparator c verglichen, so müssen der Ausdruck c.compare(e1, e2)==0 und die Methode e1.equals(e2) den gleichen boolschen Wert ergeben.

Eine weitere Möglichkeit, um ein TreeSet zu bilden, liegt darin, dem Konstrukor eine Collection zu übergeben, beispielsweise eine ArrayList.

ArrayList<String> al = new ArrayList<String>();
al.add("Pizza");
al.add("Bockwurst");
al.add("Pizza");
al.add("Currywurst");

TreeSet<String> set = new TreeSet<String>(al);
for (Iterator<String> it = set.iterator(); it.hasNext();) {
    System.out.println(it.next());
}

Wie in den beiden Beispielen demonstriert, kann das Iterator-Objekt des Set durch die Methode iterator() geholt werden. Soll das Durchlaufen des TreeSet in umgekehrter Reihenfolge erfolgen, kann hierzu die Methode descendingIterator() verwendet werden:

Iterator<String> it = set.descendingIterator();
            

Die Sortierung eines TreeSet erfolgt prinzipiell in natürlicher Reihenfolge oder wahlweise über einen Comparator, der dem Konstruktor bei der Bildung des TreeSet übergeben werden kann.

Die Klasse TreeSet kennt eine Reihe von Methoden, die zur Navigation in Objekten der Klasse Verwendung finden. Einige sind in der unten stehenden Tabelle gelistet.
Gesondert soll jedoch noch auf die Methoden lower(E e) und higher(E e) hingewiesen werden. Das ihnen übergebene Element muss nicht zwingend selbst in dem TreeSet enthalten sein, auf dem die Methode aufgerufen wird. Es muss jedoch der o.a. Vergleichbarkeitsregel genügen. So liefern die Aufrufe auf dem ersten oben aufgeführten TreeSet folgendes:

System.out.println(ts.lower("Manfred")); // Karl
System.out.println(ts.higher("Manfred")); // Paul

Ein Element Manfred ist im TreeSet nicht enthalten. Es werden aber die Elemente zurück gegeben, die bei einem Eintrag diesem vorangehen, bzw. nachfolgen würden.

TreeSet.add(E e) Fügt ein Element in ein TreeSet ein, wenn es nicht bereits enthalten ist.
TreeSet.size() Gibt die Anzahl der Einträge in einem TreeSet zurück.
TreeSet.remove(E e) Entfernt den Eintrag e aus dem TreeSet.
TreeSet.clear() Leert ein TreeSet vollständig.
TreeSet.contains(Object o) Prüft, ob o im TreeSet enthalten ist.
TreeSet.first() Liefert das erste gespeicherte Element.
TreeSet.last() Liefert das letzte gespeicherte Element.
TreeSet.lower(E e) Liefert das e vorangehende Element.
TreeSet.higher(E e) Liefert das e nachfolgende Element.