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

Collection

Интерфейс находится в составе JDK c версии 1.2 и определяет основные методы работы с простыми наборами элементов, которые будут общими для всех его реализаций (например size(), isEmpty(), add(E e) и др.).

Методы для работы с лямбдами (такие как stream(), parallelStream(), removeIf(Predicate<? super E> filter) и др.) были добавлены только с Java 8.

Методы:

add, addAll, remove, removeAll, removeIf, retainAll, size, clear, contains, containsAll, stream, parallelStream, iterator, spliterator, toArray, toArray(T[] a)

List

Реализации этого интерфейса представляют собой упорядоченные коллекции. Кроме того, разработчику предоставляется возможность доступа к элементам коллекции по индексу и по значению (так как реализации позволяют хранить дубликаты, результатом поиска по значению будет первое найденное вхождение).

Методы:

indexOf, get, add/remove/set(index, ), sort, sublist

В Java 9/10 добавлены статические методы для создания иммутабелных экземпляров List:

List.of(...), List.copyOf(...)

Queue

Этот интерфейс описывает коллекции с предопределённым способом вставки и извлечения элементов, а именно — очереди FIFO (first-in-first-out).

Помимо методов, определённых в интерфейсе Collection, определяет дополнительные методы для извлечения и добавления элементов в очередь.

Большинство реализаций данного интерфейса находится в пакете java.util.concurrent

BlockingQueue

Интерфейс предоставляющий реализации очередей с возможностью блокировки при добалвении/получении элемента.

Помимо возможности задавать размер queue, добавились новые методы, которые реагируют по-разному на незаполнение или переполнение queue. Так, например, при добавлении элемента в переполненную queue, один метод кинет IllegalStateException, другой вернет false, третий заблокирует поток, пока не появится место, четвертый же заблокирует поток с таймаутом и вернет false, если место так и не появится (см Операции на очереди).

Также стоит отметить, что блокирующие очереди не поддерживают null значения, т.к. это значение используется в методе poll как индикатор таймаута.

TransferQueue

В отличие от реализации очередей интерфейса BlockingQueue, где потоки могут быть блокированы при чтении, если очередь пустая, либо при записи, если очередь полная, очереди интерфейса TransferQueue блокируют поток записи до тех пор, пока другой поток не извлечет элемент. Для этого следует использовать метод transfer.

Deque

Двусторонняя очередь (Double ended queue), позволяет работать с элементами коллекции, как со стеком и как с очередью.

BlockingDeque

Двустороняя BlockingQueue.

Set

Представляет собой неупорядоченную коллекцию, которая не может содержать дублирующиеся данные. Является программной моделью математического понятия «множество».

В Java 9/10 добавлены статические методы для создания иммутабелных экземпляров Set:

Set.of(...), Set.copyOf(...)

SortedSet

Интерфейс позволяющий обходить (и хранить) элементы множества в определенном порядке.

Map

Данный интерфейс также находится в составе JDK c версии 1.2 и предоставляет разработчику базовые методы для работы с данными вида «ключ — значение».

В версии Java 8 появились дополнительные методы для работы с лямбдами, а также методы, которые зачастую реализовались в логике приложения (getOrDefault(Object key, V defaultValue), putIfAbsent(K key, V value)).

Методы:

put, putAll, remove, keySet, entrySet, clear, containsValue, containsKey, get, replace, values

В Java 9/10 добавлены статические методы для создания иммутабелных экземпляров Map, Entry:

Map.of(...), Map.copyOf(...), Map.ofEnties(...), Map.entry(...)

SortedMap

Интерфейс позволяющий обходить (и хранить) элементы мапы в определенном порядке.

ConcurrentMap

Map с несколькими дополнительными атомарными операциями + улучшенные реализации HashMap, TreeMap с лучшей поддержкой многопоточности и масштабируемости.

ConcurrentNavigableMap

Расширяет интерфейс NavigableMap и вынуждает использовать ConcurrentNavigableMap объекты в качестве возвращаемых значений.

Все итераторы декларируются как безопасные к использованию и не кидают ConcurrentModificationException.

Операции на очереди

Queue
Вызывает Exception

Queue
Чтение значения

BlockingQueue
Блокировка

BlockingQueue
Чтение с задержкой

Insert

add(e)

offer(e): boolean

put(e)

offer(e, time, unit)

Remove

remove()

poll(): E | null

take()

poll(time, unit)

Проверка

element()

peek(): E | null

не применимый

не применимый

Transfer

TransferQueue:
tryTransfer(e)

TransferQueue:
transfer(e)

TransferQueue:
tryTransfer(e, timeout, unit)

Функциональные Операции на Map

V putIfAbsent(K key, V value)

It inserts the specified value with the specified key in the map only if it is not already specified.

V compute(K key, (K, V) -> V remappingFunction)

remappingFunction для key, или null, если отсвутствует данный элемент. It is used to compute a mapping for the specified key and its current mapped value (or null if there is no current mapping).

V computeIfAbsent(K key, K -> V mappingFunction)

Расчитать новое значение по данному ключу функцией mappingFunction. It is used to compute its value using the given mapping function, if the specified key is not already associated with a value (or is mapped to null), and enters it into this map unless null.

V computeIfPresent(K key, (K, V) -> V remappingFunction)

remappingFunction для key, если key есть и не null. It is used to compute a new mapping given the key and its current mapped value if the value for the specified key is present and non-null.

forEach((K, V) -> Void action)

It performs the given action for each entry in the map until all entries have been processed or the action throws an exception.

V getOrDefault(Object key, V defaultValue)

It returns the value to which the specified key is mapped, or defaultValue if the map contains no mapping for the key.

V merge(K key, V value, (V, V) -> V remappingFunction)

If the specified key is not already associated with a value or is associated with null, associates it with the given non-null value.

void replaceAll((K, V) -> V function)

It replaces each entry’s value with the result of invoking the given function on that entry until all entries have been processed or the function throws an exception.