A TreeSet is to HashSet what TreeMap is to HashMap. It stores unique elements in sorted order:
import java.util.TreeSet;
TreeSet<Integer> nums = new TreeSet<>();
nums.add(30);
nums.add(10);
nums.add(20);
nums.add(10); // duplicate, ignored
System.out.println(nums); // [10, 20, 30]
The set holds elements in ascending order. Like TreeMap, all operations run in time and space.
TreeSet also gives you methods that HashSet lacks: .first() and .last() return the smallest and largest elements, .headSet(value) returns all elements below a threshold, and .tailSet(value) returns all elements at or above it. These make TreeSet useful for range queries.