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, а не копию.