Интерфейс Java NavigableSet, java.util.NavigableSet, является подтипом интерфейса SortedSet. Поэтому NavigableSet ведет себя как SortedSet, но с дополнительным набором методов навигации, доступных в дополнении к механизмам сортировки родителя.
Реализации
В Java 6-13 есть только одна реализация интерфейса в пакете java.util: класс java.util.TreeSet. В пакете java.util.concurrent есть реализация, которая называется ConcurrentSkipListSet, но она выходит за рамки этого урока.
Как создать NavigableSet
Вы должны сначала создать экземпляр одного из классов, реализующих интерфейс NavigableSet. Вот пример создания экземпляра класса TreeSet, который реализует интерфейс:
NavigableSet navigableSet = new TreeSet();
downndingSet()
Метод возвращает NavigableSet, в котором порядок элементов обращен. Возвращенный «вид» поддерживается исходным, поэтому изменения в нисходящем наборе также отражаются в исходном наборе:
NavigableSet reverse = original.descendingSet();
downndingIterator()
Метод позволяет вам перебирать элементы NavigableSet (который также является SortedSet) в обратном порядке, без изменения внутреннего порядка элементов.
Iterator reverse = original.descendingIterator();
headSet()
Метод возвращает представление исходного NavigableSet, который содержит только элементы, которые «меньше» данного элемента:
NavigableSet original = new TreeSet();
original.add("1");
original.add("2");
original.add("3");
//this headset will contain "1" and "2"
SortedSet headset = original.headSet("3");
//this headset will contain "1", "2", and "3" because "inclusive"=true
NavigableSet headset = original.headSet("3", true);
tailSet()
Метод tailSet() работает так же, как метод headSet(), за исключением того, что он возвращает все элементы, которые равны или превышают данный элемент параметра:
NavigableSet original = new TreeSet();
original.add("1");
original.add("2");
original.add("3");
//this tailSet will contain "2" and "3"
SortedSet tailSet = original.tailSet("2");
//this tailSet will contain "3" only because "inclusive"=false
NavigableSet tailSet = original.tailSet("2", false);
subSet()
Метод позволяет передавать два параметра, определяющих границы возвращаемого набора представлений. Элементы, соответствующие первой границе, включены, тогда как элементы, соответствующие последней границе, отсутствуют. Вот пример:
NavigableSet original = new TreeSet();
original.add("1");
original.add("2");
original.add("3");
original.add("4");
original.add("5");
//this subset will contain "2" and "3"
SortedSet subset = original.subSet("2", "4");
//this subset will contain "2", "3" and "4" because
// fromInclusive=true, and toInclusive=true
NavigableSet subset = original.subSet("2", true, "4", true);
ceiling()
Метод ceiling() возвращает наименьший элемент в этом наборе, который больше или равен элементу, переданному в качестве параметра методу:
NavigableSet original = new TreeSet();
original.add("1");
original.add("3");
original.add("5");
//ceiling will be "3".
Object ceiling = original.ceiling("2");
floor()
Метод возвращает наибольший элемент, который меньше или равен заданному значению параметра:
NavigableSet original = new TreeSet();
original.add("1");
original.add("3");
original.add("5");
//floor will be "1".
Object floor = original.floor("2");
higher()
Метод higher() возвращает наименьший элемент в этом наборе, который больше (не равен тоже) элемента, переданного в качестве параметра:
NavigableSet original = new TreeSet();
original.add("1");
original.add("2");
original.add("3");
//higher will be "3".
Object higher = original.higher("2");
lower()
Метод lower() делает противоположное методу upper(), то есть возвращает самый высокий элемент, который меньше (не равен) заданного параметра:
NavigableSet original = new TreeSet();
original.add("1");
original.add("2");
original.add("3");
//lower will be "1"
Object lower = original.lower("2");
pollFirst()
Метод pollFirst() возвращает и удаляет «первый» элемент в NavigableSet или ноль, если набор пуст. «Первый» означает наименьший элемент в соответствии с порядком сортировки набора:
NavigableSet original = new TreeSet();
original.add("1");
original.add("2");
original.add("3");
//first is "1"
Object first = original.pollFirst();
pollLast()
Метод pollLast() возвращает и удаляет «последний» элемент в NavigableSet. «Последний» означает наибольшее в соответствии с порядком сортировки элементов набора:
NavigableSet original = new TreeSet();
original.add("1");
original.add("2");
original.add("3");
//last is "3"
Object last = original.pollLast();
