Gymterview
junior

Sequenced Collections

Sequenced Collections (Java 21) — новые интерфейсы, добавляющие единообразный доступ к первому/последнему элементу и реверсу для всех упорядоченных коллекций через методы getFirst(), getLast(), reversed().

Аналогия из жизни: до Java 21 у каждой очереди в магазине были разные правила: в одной спрашиваешь «кто первый?», в другой — «номер 1», в третьей — вообще не узнаешь. Sequenced Collections — единые правила для всех очередей.

Пример
// Проблема до Java 21:
// List:          list.get(0), list.get(list.size()-1)
// Deque:         deque.getFirst(), deque.getLast()
// SortedSet:     set.first(), set.last()
// LinkedHashSet: ??? (только через итератор)

// Java 21 — единый API:
List<String> list = new ArrayList<>(List.of("A", "B", "C"));
list.getFirst();  // "A"
list.getLast();   // "C"
list.reversed().forEach(System.out::println); // C, B, A

// LinkedHashSet — теперь с getFirst/getLast
LinkedHashSet<String> set = new LinkedHashSet<>(List.of("X", "Y", "Z"));
set.getFirst(); // "X"
set.getLast();  // "Z"

Иерархия интерфейсов

Пример
                  Collection
                      |
              SequencedCollection
               /            \
        List              SequencedSet
                           /       \
                     SortedSet   LinkedHashSet

Частые ошибки

  • getFirst() на пустой коллекции — NoSuchElementException; проверяйте isEmpty()
  • Мутация через reversed() view — изменения в reversed view влияют на оригинальную коллекцию
  • addFirst() / addLast() для unmodifiable — UnsupportedOperationException

Как используется в 2026

  • Sequenced Collections — часть стандартного API, используется повсеместно
  • Заменяет нечитаемые конструкции вроде list.get(list.size() - 1)

На собеседовании: покажите, что знаете проблему (разный API для первого/последнего элемента в List, Deque, SortedSet) и решение (единый интерфейс SequencedCollection). Упомяните, что reversed() возвращает view, а не копию.