Интерфейс Collection<E>

Параметры типа:
E - тип элементов в этом наборе
Все суперинтерфейсы:
Iterable<E>
Все известные подинтерфейсы:
BeanContext, BeanContextServices, BlockingDeque<E>, BlockingQueue<E>, Deque<E>, EventSet, List<E>, NavigableSet<E>, Queue<E>, Set<E>, SortedSet<E>, TransferQueue<E>
Все известные реализующие классы:
AbstractCollection, AbstractList, AbstractQueue, AbstractSequentialList, AbstractSet, ArrayBlockingQueue, ArrayDeque, ArrayList, AttributeList, BeanContextServicesSupport, BeanContextSupport, ConcurrentHashMap.KeySetView, ConcurrentLinkedDeque, ConcurrentLinkedQueue, ConcurrentSkipListSet, CopyOnWriteArrayList, CopyOnWriteArraySet, DelayQueue, EnumSet, HashSet, JobStateReasons, LinkedBlockingDeque, LinkedBlockingQueue, LinkedHashSet, LinkedList, LinkedTransferQueue, PriorityBlockingQueue, PriorityQueue, RoleList, RoleUnresolvedList, Stack, SynchronousQueue, TreeSet, Vector
public interface Collection<E>
extends Iterable<E>

Корневой интерфейс в иерархии коллекций. Коллекция представляет собой группу объектов, известных как её элементы. Некоторые коллекции допускают дублирование элементов, а другие — нет. Некоторые упорядочены, а другие — нет. JDK не предоставляет прямых реализаций этого интерфейса: он предоставляет реализации более специфичных подинтерфейсов, таких как Set и List. Этот интерфейс обычно используется для передачи коллекций и манипулирования ими, где требуется максимальная общность.

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

Все классы-реализации Collection общего назначения (которые обычно реализуют Collection косвенно через один из его подинтерфейсов) должны обеспечивать два «стандартных» конструктора: конструктор без аргументов, который создает пустую коллекцию, и конструктор с одним аргументом типа Collection, который создаёт новую коллекцию с теми же элементами, что и её аргумент. По сути, последний конструктор позволяет пользователю копировать любую коллекцию, создавая эквивалентную коллекцию нужного типа реализации. Нет способа закрепить эту конвенцию (поскольку интерфейсы не могут содержать конструкторы), но все реализации Collection общего назначения в библиотеках Java Platform соответствуют ей.

Некоторые методы определены как необязательные. Если реализация коллекции не реализует определенную операцию, она должна определить соответствующий метод, чтобы выбросить UnsupportedOperationException. Такие методы отмечены как «необязательная операция» в спецификациях методов интерфейсов коллекций.

У некоторых реализаций коллекций есть ограничения на элементы, которые они могут содержать. Например, некоторые реализации запрещают null-элементы, и некоторые имеют ограничения на типы элементов. Попытка добавить неприемлемый элемент вызывает неконтролируемое исключение, обычно NullPointerException или ClassCastException. Попытка запросить наличие неприемлемого элемента может вызвать исключение или просто вернуть false; некоторые реализации проявят первое поведение, а некоторые — второе. Более общо, попытка операции с неприемлемым элементом, завершение которой не приведёт к вставке неприемлемого элемента в коллекцию, может вызвать исключение или завершиться успешно, по выбору реализации. Такие исключения отмечены как «необязательные» в спецификации этого интерфейса.

Каждая коллекция определяет свою политику синхронизации. В отсутствие более сильной гарантии реализации, вызов любого метода на коллекции, которая изменяется другим потоком, может привести к неопределённому поведению; это включает прямые вызовы, передачу коллекции методу, который может выполнить вызовы, и использование существующего итератора для просмотра коллекции.

Многие методы в интерфейсах Collections Framework определены с помощью метода equals. Например, спецификация метода contains(Object o) гласит: «возвращает true тогда и только тогда, когда эта коллекция содержит по крайней мере один элемент e такой, что (o==null ? e==null : o.equals(e))». Эта спецификация не должна подразумевать, что вызов Collection.contains с ненулевым аргументом o вызовет o.equals(e) для любого элемента e. Реализации могут реализовывать оптимизации, в которых вызов equals избегается, например, сначала сравнивая коды хеширования двух элементов. (Спецификация Object.hashCode() гарантирует, что два объекта с разными кодами хеширования не могут быть равны.) Более общо, реализации различных интерфейсов Collections Framework могут использовать указанное поведение методов Object по своему усмотрению.

Некоторые операции с коллекциями, которые выполняют рекурсивное обход коллекции, могут завершиться исключением для самоссылочных экземпляров, где коллекция прямо или косвенно содержит себя. Это включает методы clone(), equals(), hashCode() и toString(). Реализации могут по своему усмотрению обрабатывать сценарий самоссылок, но большинство текущих реализаций этого не делают.

Коллекции-представления

Большинство коллекций управляют хранением элементов, которые они содержат. В отличие от них, коллекции-представления сами не хранят элементы, а вместо этого полагаются на базовую коллекцию для хранения фактических элементов. Операции, которые не обрабатываются самой коллекцией-представлением, делегируются базовой коллекции. Примеры коллекций-представлений включают оборачивающие коллекции, возвращаемые методами, такими как Collections.checkedCollection, Collections.synchronizedCollection и Collections.unmodifiableCollection. Другие примеры коллекций-представлений включают коллекции, которые предоставляют иное представление одних и тех же элементов, например, предоставляемые List.subList, NavigableSet.subSet или Map.entrySet. Любые изменения, внесённые в базовую коллекцию, видны в коллекции-представлении. Соответственно, любые изменения, внесённые в коллекцию-представление (если изменения разрешены), записываются в базовую коллекцию. Несмотря на то, что они технически не являются коллекциями, экземпляры Iterator и ListIterator также могут позволить прописывать изменения в базовую коллекцию, а в некоторых случаях изменения в базовой коллекции будут видны итератору во время итерации.

Неизменяемые коллекции

Некоторые методы этого интерфейса считаются «деструктивными» и называются методами-модификаторами, так как они изменяют группу объектов, содержащихся в коллекции, над которой они работают. Они могут быть заданы так, чтобы выбросить UnsupportedOperationException если эта реализация коллекции не поддерживает операцию. Такие методы должны (но не обязаны) выбрасывать UnsupportedOperationException если вызов не окажет никакого влияния на коллекцию. Например, рассмотрим коллекцию, которая не поддерживает операцию add. Что произойдёт, если метод addAll будет вызван для этой коллекции с пустой коллекцией в качестве аргумента? Добавление нуля элементов не оказывает никакого влияния, поэтому для этой коллекции допустимо просто ничего не делать и не выбрасывать исключение. Однако рекомендуется, чтобы в таких случаях выбрасывалось исключение безоговорочно, так как выбрасывание только в определенных случаях может привести к ошибкам программирования.

Неизменяемая коллекция — это коллекция, все методы-модификаторы которой (как определено выше) заданы так, чтобы выбрасывать UnsupportedOperationException. Таким образом, такую коллекцию нельзя изменить, вызывая на ней любые методы. Для того, чтобы коллекция была должным образом неизменяемой, любые коллекции-представления, полученные из неё, также должны быть неизменяемыми. Например, если список неизменяем, список, возвращаемый List.subList, также неизменяем.

Неизменяемая коллекция не обязательно является неизменной. Если содержащиеся элементы изменяемы, вся коллекция явно изменяема, даже если она может быть неизменяемой. Например, рассмотрим два неизменяемых списка, содержащих изменяемые элементы. Результат вызова list1.equals(list2) может отличаться от вызова к вызову, если элементы были изменены, даже если оба списка неизменяемы. Однако, если неизменяемая коллекция содержит только неизменяемые элементы, её можно считать фактически неизменной.

Неизменяемые коллекции-представления

Неизменяемая коллекция-представление — это коллекция, которая является неизменяемой и также является представлением базовой коллекции. Её методы-модификаторы выбрасывают UnsupportedOperationException, как описано выше, в то время как методы чтения и запроса делегируются базовой коллекции. Результатом является предоставление только для чтения доступа к базовой коллекции. Это полезно для компонента, предоставляющего пользователям доступ для чтения к внутренней коллекции, предотвращая их неожиданное изменение таких коллекций. Примеры неизменяемых коллекций-представлений — те, которые возвращаются методами Collections.unmodifiableCollection, Collections.unmodifiableList и аналогичными.

Обратите внимание, что изменения в базовой коллекции всё ещё могут быть возможны, и если они произойдут, они будут видны через неизменяемое представление. Таким образом, неизменяемая коллекция-представление не обязательно является неизменной. Однако, если базовая коллекция неизменяемого представления фактически неизменна или если единственная ссылка на базовую коллекцию через неизменяемое представление, представление может считаться фактически неизменным.

Этот интерфейс является членом Java Collections Framework.

Требования к реализации:
Реализация методов по умолчанию (унаследованные или другие) не применяют никакого протокола синхронизации. Если реализация Collection имеет специфический протокол синхронизации, то она должна переопределить реализации по умолчанию для применения этого протокола.
С тех пор как:
1.2
См. также:
Set, List, Map, SortedSet, SortedMap, HashSet, TreeSet, ArrayList, LinkedList, Vector, Collections, Arrays, AbstractCollection

Методы

Модификатор и тип Метод Описание
boolean add​(E e)

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

boolean addAll​(Collection<? extends E> c)

Добавляет все элементы из указанной коллекции в эту коллекцию (необязательная операция).

void clear()

Удаляет все элементы из этой коллекции (необязательная операция).

boolean contains​(Object o)

Возвращает true, если эта коллекция содержит указанный элемент.

boolean containsAll​(Collection<?> c)

Возвращает true, если эта коллекция содержит все элементы из указанной коллекции.

boolean equals​(Object o)

Сравнивает указанный объект с этой коллекцией на равенство.

int hashCode()

Возвращает значение хэш-кода для этой коллекции.

boolean isEmpty()

Возвращает true, если эта коллекция не содержит элементов.

Iterator<E> iterator()

Возвращает итератор по элементам в этой коллекции.

default Stream<E> parallelStream()

Возвращает, возможно, параллельный Stream с этой коллекцией в качестве источника.

boolean remove​(Object o)

Удаляет единственный экземпляр указанного элемента из этой коллекции, если он присутствует (необязательная операция).

boolean removeAll​(Collection<?> c)

Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательная операция).

default boolean removeIf​(Predicate<? super E> filter)

Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату.

boolean retainAll​(Collection<?> c)

Оставляет только элементы в этой коллекции, которые содержатся в указанной коллекции (необязательная операция).

int size()

Возвращает количество элементов в этой коллекции.

default Spliterator<E> spliterator()

Создает Spliterator по элементам в этой коллекции.

default Stream<E> stream()

Возвращает последовательный Stream с этой коллекцией в качестве источника.

Object[] toArray()

Возвращает массив, содержащий все элементы в этой коллекции.

default <T> T[] toArray​(IntFunction<T[]> generator)

Возвращает массив, содержащий все элементы в этой коллекции, используя предоставленную функцию generator для выделения возвращаемого массива.

<T> T[] toArray​(T[] a)

Возвращает массив, содержащий все элементы в этой коллекции; тип возвращаемого массива совпадает с типом указанного массива.

Методы, объявленные в интерфейсе java.lang.Iterable

forEach

Методы

size

int size()

Возвращает количество элементов в этом наборе. Если этот набор содержит более чем Integer.MAX_VALUE элементов, возвращает Integer.MAX_VALUE.

Возвращает:
количество элементов в этом наборе

isEmpty

boolean isEmpty()

Возвращает true, если этот набор не содержит элементов.

Возвращает:
true если этот набор не содержит элементов

contains

boolean contains(Object o)

Возвращает true, если этот набор содержит указанный элемент. Более формально, возвращает true тогда и только тогда, когда этот набор содержит как минимум один элемент e, такой, что Objects.equals(o, e).

Параметры:
o - элемент, присутствие которого в этом наборе необходимо проверить
Возвращает:
true если этот набор содержит указанный элемент
Исключение:
ClassCastException - если тип указанного элемента несовместим с этим набором (необязательно)
NullPointerException - если указанный элемент имеет значение null, а этот набор не допускает элементов null (необязательно)

iterator

Iterator<E> iterator()

Возвращает итератор по элементам в этом наборе. Гарантии по порядку возврата элементов нет (если только этот набор не является экземпляром класса, предоставляющего гарантии).

Определено в:
iterator в интерфейсе Iterable<E>
Возвращает:
итератор по элементам в этом наборе

toArray

Object[] toArray()

Возвращает массив, содержащий все элементы этого набора. Если этот набор гарантирует порядок возврата элементов своим итератором, этот метод должен возвращать элементы в том же порядке. Тип компонента возвращаемого массива — Object.

Возвращаемый массив «безопасен», поскольку к нему не сохраняются ссылки из этого набора. (Другими словами, этот метод должен выделять новый массив, даже если этот набор подкреплен массивом). Таким образом, вызывающий метод свободен изменять возвращаемый массив.

Примечание API:
Этот метод служит мостом между основанными на массивах и основанными на коллекциях API. Он возвращает массив, тип компонента которого — Object[]. Используйте toArray(T[]) для повторного использования существующего массива или toArray(IntFunction) для управления типом возвращаемого массива.
Возвращает:
массив, тип компонента которого — Object, содержащий все элементы этого набора

toArray

<T> T[] toArray(T[] a)

Возвращает массив, содержащий все элементы этого набора; тип возвращаемого массива — тип указанного массива. Если набор помещается в указанный массив, он возвращается в нём. В противном случае выделяется новый массив с типом указанного массива и размером этого набора.

Если этот набор помещается в указанный массив с избыточными элементами (т. е. массив содержит больше элементов, чем набор), элемент в массиве сразу после конца набора устанавливается в значение null. (Это полезно для определения длины этого набора *только* если вызывающий метод знает, что этот набор не содержит элементов null.)

Если этот набор гарантирует порядок возврата элементов своим итератором, этот метод должен возвращать элементы в том же порядке.

Примечание API:
Этот метод служит мостом между основанными на массивах и основанными на коллекциях API. Он позволяет повторно использовать существующий массив в определённых ситуациях. Используйте toArray() для создания массива, тип компонента которого — Object[], или toArray(IntFunction) для управления типом массива.

Предположим, что x — это набор, известно, что он содержит только строки. Следующий код может быть использован для выгрузки набора в ранее выделенный массив String:

String[] y = new String[SIZE];
     ...
     y = x.toArray(y);

Значение возврата переприсваивается переменной y, потому что будет выделен и возвращён новый массив, если в набор x слишком много элементов, чтобы они поместились в существующий массив y.

Обратите внимание, что toArray(new Object[0]) идентичен по функциональности toArray().

Параметры типа:
T - тип компонента массива, который должен содержать набор
Параметры:
a - массив, в который будут помещены элементы этого набора, если он достаточно велик; в противном случае для этой цели выделяется новый массив того же типа.
Возвращает:
массив, содержащий все элементы этого набора
Исключение:
ArrayStoreException - если тип выполнения любого элемента в этом наборе не может быть приведён к типу компонента указанного массива
NullPointerException - если указанный массив имеет значение null

toArray

default <T> T[] toArray(IntFunction<T[]> generator)

Возвращает массив, содержащий все элементы этого набора, используя предоставленную функцию generator для выделения возвращаемого массива.

Если этот набор гарантирует порядок возврата элементов своим итератором, этот метод должен возвращать элементы в том же порядке.

Примечание API:
Этот метод служит мостом между основанными на массивах и основанными на коллекциях API. Он позволяет создавать массив определённого типа выполнения. Используйте toArray() для создания массива, тип компонента которого — Object[], или toArray(T[]) для повторного использования существующего массива.

Предположим, что x — это набор, известно, что он содержит только строки. Следующий код можно использовать для выгрузки набора в новый выделенный массив String:

String[] y = x.toArray(String[]::new);
Требования к реализации:
Базовая реализация вызывает функцию-генератор с нулём, а затем передает полученный массив в toArray(T[]).
Параметры типа:
T - тип компонента массива, который должен содержать набор
Параметры:
generator - функция, которая создаёт новый массив нужного типа и заданной длины
Возвращает:
массив, содержащий все элементы этого набора
Исключение:
ArrayStoreException - если тип выполнения любого элемента в этом наборе не может быть приведён к типу компонента сгенерированного массива
NullPointerException - если функция-генератор имеет значение null
С:
11

add

boolean add(E e)

Обеспечивает, что этот набор содержит указанный элемент (необязательная операция). Возвращает true если этот набор изменился в результате вызова. (Возвращает false если этот набор не допускает дубликатов и уже содержит указанный элемент.)

Наборы, поддерживающие эту операцию, могут накладывать ограничения на добавляемые элементы. В частности, некоторые наборы будут отказываться добавлять null элементы, а другие будут накладывать ограничения на тип добавляемых элементов. Классы наборов должны чётко указывать в своей документации любые ограничения на добавляемые элементы.

Если набор отказывается добавить определённый элемент по любой причине, кроме того, что он уже содержит этот элемент, он *обязательно* должен выбросить исключение (а не вернуть false). Это сохраняет инвариант, что набор всегда содержит указанный элемент после возвращения из этого вызова.

Параметры:
e - элемент, присутствие которого в этом наборе необходимо гарантировать
Возвращает:
true если этот набор изменился в результате вызова
Исключение:
UnsupportedOperationException - если операция add не поддерживается этим набором
ClassCastException - если класс указанного элемента не позволяет добавить его в этот набор
NullPointerException - если указанный элемент имеет значение null, а этот набор не допускает элементов null
IllegalArgumentException - если какое-либо свойство элемента не позволяет добавить его в этот набор
IllegalStateException - если элемент не может быть добавлен в данный момент из-за ограничений на вставку

remove

boolean remove(Object o)

Удаляет единственный экземпляр указанного элемента из этого набора, если он присутствует (необязательная операция). Более формально, удаляет элемент e, такой, что Objects.equals(o, e), если этот набор содержит один или несколько таких элементов. Возвращает true если этот набор содержал указанный элемент (или, что эквивалентно, если этот набор изменился в результате вызова).

Параметры:
o - элемент, подлежащий удалению из этого набора, если он присутствует
Возвращает:
true если элемент был удалён в результате этого вызова
Исключение:
ClassCastException - если тип указанного элемента несовместим с этим набором (необязательно)
NullPointerException - если указанный элемент имеет значение null, а этот набор не допускает элементов null (необязательно)
UnsupportedOperationException - если операция remove не поддерживается этим набором

containsAll

boolean containsAll(Collection<?> c)

Возвращает true если этот набор содержит все элементы в указанном наборе.

Параметры:
c — коллекция, в которой проверяется наличие элементов этой коллекции
Возвращает:
true если эта коллекция содержит все элементы указанной коллекции
Исключение:
ClassCastException — если типы одного или нескольких элементов в указанной коллекции несовместимы с этой коллекцией (необязательно)
NullPointerException — если указанная коллекция содержит один или несколько нулевых элементов, а эта коллекция не допускает нулевых элементов (необязательно), или если указанная коллекция равна null.
См. также:
contains(Object)

addAll

boolean addAll(Collection<? extends E> c)

Добавляет все элементы указанной коллекции в эту коллекцию (необязательная операция). Поведение этой операции не определено, если указанная коллекция изменяется во время выполнения операции. (Это подразумевает, что поведение этого вызова не определено, если указанная коллекция является этой коллекцией, и эта коллекция не пуста.)

Параметры:
c — коллекция, содержащая элементы, которые нужно добавить в эту коллекцию
Возвращает:
true если эта коллекция изменилась в результате вызова
Исключение:
UnsupportedOperationException — если операция addAll не поддерживается этой коллекцией
ClassCastException — если класс элемента указанной коллекции препятствует его добавлению в эту коллекцию
NullPointerException — если указанная коллекция содержит нулевой элемент, а эта коллекция не допускает нулевых элементов, или если указанная коллекция равна null
IllegalArgumentException — если какое-либо свойство элемента указанной коллекции препятствует его добавлению в эту коллекцию
IllegalStateException — если не все элементы могут быть добавлены в данный момент из-за ограничений вставки
См. также:
add(Object)

removeAll

boolean removeAll(Collection<?> c)

Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательная операция). После возвращения этого вызова эта коллекция не будет содержать общих элементов с указанной коллекцией.

Параметры:
c — коллекция, содержащая элементы, которые нужно удалить из этой коллекции
Возвращает:
true если эта коллекция изменилась в результате вызова
Исключение:
UnsupportedOperationException — если метод removeAll не поддерживается этой коллекцией
ClassCastException — если типы одного или нескольких элементов в этой коллекции несовместимы с указанной коллекцией (необязательно)
NullPointerException — если эта коллекция содержит один или несколько нулевых элементов, а указанная коллекция не поддерживает нулевые элементы (необязательно), или если указанная коллекция равна null
См. также:
remove(Object), contains(Object)

removeIf

default boolean removeIf(Predicate<? super E> filter)

Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату. Ошибки или исключения времени выполнения, возникающие во время итерации или предикатом, передаются вызывающей стороне.

Требования к реализации:
Базовая реализация проходит по всем элементам коллекции с помощью iterator(). Каждый соответствующий элемент удаляется с помощью Iterator.remove(). Если итератор коллекции не поддерживает удаление, то будет выброшено исключение UnsupportedOperationException при первом соответствующем элементе.
Параметры:
filter — предикат, который возвращает true для элементов, которые нужно удалить
Возвращает:
true если какие-либо элементы были удалены
Исключение:
NullPointerException — если указанный фильтр равен null
UnsupportedOperationException — если элементы нельзя удалить из этой коллекции. Реализации могут выбросить это исключение, если соответствующий элемент нельзя удалить или если удаление вообще не поддерживается.
С:
1.8

retainAll

boolean retainAll(Collection<?> c)

Оставляет только элементы в этой коллекции, которые содержатся в указанной коллекции (необязательная операция). Другими словами, удаляет из этой коллекции все ее элементы, которые не содержатся в указанной коллекции.

Параметры:
c — коллекция, содержащая элементы, которые нужно сохранить в этой коллекции
Возвращает:
true если эта коллекция изменилась в результате вызова
Исключение:
UnsupportedOperationException — если операция retainAll не поддерживается этой коллекцией
ClassCastException — если типы одного или нескольких элементов в этой коллекции несовместимы с указанной коллекцией (необязательно)
NullPointerException — если эта коллекция содержит один или несколько нулевых элементов, а указанная коллекция не допускает нулевых элементов (необязательно), или если указанная коллекция равна null
См. также:
remove(Object), contains(Object)

clear

void clear()

Удаляет все элементы из этой коллекции (необязательная операция). Коллекция будет пустой после возвращения этого метода.

Исключение:
UnsupportedOperationException — если операция clear не поддерживается этой коллекцией

equals

boolean equals(Object o)

Сравнивает указанный объект с этой коллекцией на предмет равенства.

Хотя интерфейс Collection не накладывает ограничений на общий контракт для метода Object.equals, программисты, реализующие интерфейс Collection "непосредственно" (другими словами, создающие класс, являющийся Collection, но не являющийся Set или List), должны быть осторожны, если они выбирают переопределение метода Object.equals. Это не обязательно, и самым простым вариантом является использование реализации Object, но реализующий может захотеть реализовать "сравнение по значению" вместо стандартного "сравнения по ссылке". (Интерфейсы List и Set требуют таких сравнений по значению.)

Общий контракт для метода Object.equals гласит, что equals должен быть симметричным (другими словами, a.equals(b) тогда и только тогда, когда b.equals(a)). Контракты для List.equals и Set.equals гласят, что списки равны только другим спискам, а множества — другим множествам. Таким образом, пользовательский метод equals для класса коллекции, который не реализует ни интерфейс List, ни интерфейс Set, должен возвращать false при сравнении этой коллекции с любым списком или множеством. (По той же логике невозможно написать класс, который правильно реализует как интерфейс Set, так и интерфейс List.)

Переопределяет:
equals в классе Object
Параметры:
o — объект, который нужно сравнить на предмет равенства с этой коллекцией
Возвращает:
true если указанный объект равен этой коллекции
См. также:
Object.equals(Object), Set.equals(Object), List.equals(Object)

hashCode

int hashCode()

Возвращает значение хэш-кода для этой коллекции. Хотя интерфейс Collection не накладывает ограничений на общий контракт для метода Object.hashCode, программисты должны обратить внимание на то, что любой класс, переопределяющий метод Object.equals, также должен переопределить метод Object.hashCode, чтобы удовлетворить общему контракту для метода Object.hashCode. В частности, c1.equals(c2) подразумевает, что c1.hashCode()==c2.hashCode().

Переопределяет:
hashCode в классе Object
Возвращает:
значение хэш-кода для этой коллекции
См. также:
Object.hashCode(), Object.equals(Object)

spliterator

default Spliterator<E> spliterator()

Создаёт Spliterator над элементами в этой коллекции. Реализации должны документировать характерные значения, которые сообщает этот спиттератор. Такие характерные значения не обязаны сообщаться, если спиттератор сообщает Spliterator.SIZED, и эта коллекция не содержит элементов.

Базовая реализация должна быть переопределена подклассами, которые могут вернуть более эффективный спиттератор. Для сохранения ожидаемого ленивого поведения методов stream() и parallelStream() спиттераторы должны иметь характеристику IMMUTABLE или CONCURRENT, или быть *отложенной привязкой*. Если ни один из этих вариантов не является практичным, переопределяющий класс должен описать документированную политику привязки и структурных вмешательств спиттератора и должен переопределить методы stream() и parallelStream() для создания потоков с помощью Supplier спиттератора, как в:

Stream<E> s = StreamSupport.stream(() -> spliterator(), spliteratorCharacteristics)

Эти требования гарантируют, что потоки, созданные методами stream() и parallelStream(), будут отражать содержимое коллекции на момент начала терминальной операции потока.

Указано в:
spliterator в интерфейсе Iterable<E>
Требования к реализации:
По умолчанию реализация создает отложенно-связанный итератор разбиения из коллекции Iterator. Итератор разбиения наследует свойства быстродействующего итератора коллекции.

Созданный Spliterator сообщает о Spliterator.SIZED.

Примечание по реализации:
Созданный Spliterator дополнительно сообщает о Spliterator.SUBSIZED.

Если итератор разбиения не охватывает элементов, то передача дополнительных характеристических значений, помимо SIZED и SUBSIZED, не помогает клиентам контролировать, специализировать или упрощать вычисления. Однако это позволяет использовать общий экземпляр неизменяемого и пустого итератора разбиения (см. Spliterators.emptySpliterator()) для пустых коллекций и позволяет клиентам определять, охватывает ли такой итератор разбиения какие-либо элементы.

Возвращает:
итератор разбиения над элементами в этой коллекции
С:
1.8

stream

default Stream<E> stream()

Возвращает последовательный Stream с этой коллекцией в качестве источника.

Этот метод следует переопределять, когда метод spliterator() не может вернуть итератор разбиения, который является IMMUTABLE, CONCURRENT, или отложенно-связанным. (См. spliterator() для получения подробностей.)

Требования к реализации:
По умолчанию реализация создаёт последовательный Stream из итератора коллекции Spliterator.
Возвращает:
последовательный Stream над элементами в этой коллекции
С:
1.8

parallelStream

default Stream<E> parallelStream()

Возвращает, возможно, параллельный Stream с этой коллекцией в качестве источника. Допустимо, чтобы этот метод возвращал последовательный поток.

Этот метод следует переопределять, когда метод spliterator() не может вернуть итератор разбиения, который является IMMUTABLE, CONCURRENT, или отложенно-связанным. (См. spliterator() для получения подробностей.)

Требования к реализации:
По умолчанию реализация создаёт параллельный Stream из итератора коллекции Spliterator.
Возвращает:
возможно параллельный Stream над элементами в этой коллекции
С:
1.8

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Collection.html

Spec-Zone .ru
спецификации, руководства, описания, API