Интерфейс NavigableSet

Интерфейс NavigableSet появился в Java SE 6. Он расширяет SortedSet и добавляет методы для более удобного поиска по коллекции:

  1. Е ceiling(E obj) - ищет в наборе наименьший элемент е, для которого истинно е >= obj. Если такой элемент найден, он возвращается. В противном случае возвращается null.
  2. Е floor(Е obj) - ищет в наборе наибольший элемент е, для которого истинно е <= obj. Если такой элемент найден, он возвращается. В противном случае возвращается null.
  3. Е higher(Е obj) - ищет в наборе наибольший элемент е, для которого истинно е > obj. Если такой элемент найден, он возвращается. В противном случае возвращается null.
  4. Е lower(Е obj) - ищет в наборе наименьший элемент е, для которого истинно е < obj. Если такой элемент найден, он возвращается. В противном случае возвращается null.
  5. NavigableSet headSet(Е upperBound, boolean incl) - возвращает NavigableSet, включающий все элементы вызывающего набора, меньшие upperBound. Результирующий набор поддерживается вызывающим набором.
  6. NavigableSet subSet(Е lowerBound, boolean lowlncl, Е upperBound, boolean highIncl) - возвращает NavigableSet, включающий все элементы вызывающего набора, которые больше lowerBound и меньше upperBound. Если lowlncl равно true, то элемент, равный lowerBound, включается. Если highlncl равно true, также включается элемент, равный upperBound.
  7. E pollLast() - возвращает последний элемент, удаляя его в процессе. Поскольку набор сортирован, это будет элемент с наибольшим значением. Возвращает null в случае пустого набора.
  8. Е pollFirst() - возвращает первый элемент, удаляя его в процессе. Поскольку набор сортирован, это будет элемент с наименьшим значением. Возвращает null в случае пустого набора.
  9. Iterator descendingIterator() - возвращает итератор, перемещающийся от большего к меньшему, другими словами, обратный итератор.
  10. NavigableSet descendingSet() - возвращает NavigableSet, представляющий собой обратную версию вызывающего набора. Результирующий набор поддерживается вызывающим набором.

Класс, реализующие интерфейс NavigableSet - это TreeSet

Рассмотрим пример использования интерфейса NavigableSet:

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

public class Ferry {
    public static void main(String[] args) {
        NavigableSet<Integer> times = new TreeSet<>();
        times.add(1205); 
        times.add(1505);
        times.add(1545);
        times.add(1830);
        times.add(2010);
        times.add(2100);
        // Java 5 версия
        System.out.println("Java 5");
        SortedSet<Integer> subset = times.headSet(1600);
        System.out.println("Последний паром перед 16:00 - " + subset.last());
        
        SortedSet<Integer> tailSet = times.tailSet(2000);
        System.out.println("Первый паром после 20:00 - " + tailSet.first());
        System.out.println();
        
        // Java 6 версия использует новые методы lower() и higher()
        System.out.println("Java 6");
        System.out.println("Последний паром перед 16:00 - " + times.lower(1600));
        System.out.println("Первый паром после 20:00 - " + times.higher(2000));
    }
}
Read also:
Comments