Подлинная сила и преимущество TreeSet заключается в интерфейсе, который он реализует - NavigableSet
Почему он такой мощный и в каком случае?
Интерфейс Navigable Set добавляет, например, эти 3 приятных метода:
headSet(E toElement, boolean inclusive)
tailSet(E fromElement, boolean inclusive)
subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)
Эти методы позволяют организовать эффективный алгоритм поиска (очень быстрый).
Пример: нам нужночтобы найти все имена, которые начинаются с Milla и заканчиваются Wladimir:
TreeSet<String> authors = new TreeSet<String>();
authors.add("Andreas Gryphius");
authors.add("Fjodor Michailowitsch Dostojewski");
authors.add("Alexander Puschkin");
authors.add("Ruslana Lyzhichko");
authors.add("Wladimir Klitschko");
authors.add("Andrij Schewtschenko");
authors.add("Wayne Gretzky");
authors.add("Johann Jakob Christoffel");
authors.add("Milla Jovovich");
authors.add("Taras Schewtschenko");
System.out.println(authors.subSet("Milla", "Wladimir"));
output:
[Milla Jovovich, Ruslana Lyzhichko, Taras Schewtschenko, Wayne Gretzky]
TreeSet не охватывает все элементы, он находит первый и последний элементыи возвращает новую коллекцию со всеми элементами в диапазоне.