TreeSets

A TreeSet is an implementation of interface Set that stores the elements in their natural order or, optionally, in a user-defined order. It implements the NavigableSet interface, which provides numerous methods for working with the set in terms of the order of the elements.

package collections.sets;

import java.util.Iterator;
import java.util.List;
import java.util.NavigableSet;
import java.util.SortedSet;
import java.util.TreeSet;

public class UsingTreeSet {
	public static void main(String[] args) {
		
// Using the natural order TreeSet<String> set = new TreeSet<>(List.of("A", "C", "B")); // [A,B,C]
// Using a user-defined order, e.g., case insensitive
set = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
set.addAll(List.of("A", "b", "C")); // [A,b,C] // Using a custom comparator for the user-defined order by length set = new TreeSet<>((a,b) -> a.length() - b.length()); set.addAll(List.of("AA", "B", "CCC")); // [B, AA, CCC] // Modifying the set set = new TreeSet<>(List.of("C","B")); // [B,C] set.add("A"); // [A,B,C] set.add("D"); // [A,B,C,D] String letter = set.removeFirst(); // [B,C,D] letter = set.removeLast(); // [B,C] // set.addFirst("A"); // throws UnsupportedOperationException // Querying the set set = new TreeSet<>(List.of("d","b","a","e","c")); // [a,b,c,d,e] String first = set.first(); // -> a String last = set.last(); // -> e
String lower = set.lower("c"); // -> b String floor = set.floor("c"); // -> c String ceiling = set.ceiling("c"); // -> c String higher = set.higher("c"); // -> d
// Producing subsets views SortedSet<String> head = set.headSet("c"); // [a,b] SortedSet<String> tail = set.tailSet("c"); // [c,d,e] SortedSet<String> subset = set.subSet("b", "d"); // [b,c] // Removing elements
set.pollFirst(); // [b,c,d,e] -> a set.removeFirst(); // [c,d,e] -> b
// See also pollLast and removeLast // Working with the reverse order: iterators and descending sets set = new TreeSet<>(List.of("d","b","a","e","c")); // [a,b,c,d,e]
for (Iterator<String> iterator = set.descendingIterator(); iterator.hasNext(); ) { System.out.println(iterator.next()); }
NavigableSet<String> reversed = set.descendingSet(); for (String letter2 : reversed) { System.out.println(letter2); } last = reversed.first(); // -> e
} }