Spec-Zone.ru › OpenJDK 21

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

Параметры типа:
E - тип элементов в этом наборе
Все суперинтерфейсы:
Iterable<E>
Все известные подинтерфейсы:
BeanContext, BeanContextServices, BlockingDeque<E>, BlockingQueue<E>, Deque<E>, EventSet, List<E>, NavigableSet<E>, Queue<E>, SequencedCollection<E>, SequencedSet<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>
Корневой интерфейс в иерархии коллекций. Коллекция представляет собой группу объектов, известных как ее элементы. Некоторые коллекции допускают дублирование элементов, а другие — нет. Некоторые упорядочены, а другие — нет. Коллекции, имеющие определённый порядок встречи, обычно являются подтипами интерфейса SequencedCollection. JDK не предоставляет никаких прямых реализаций этого интерфейса: он предоставляет реализации более специфических подинтерфейсов, таких как Set и List. Этот интерфейс обычно используется для передачи и манипулирования коллекциями, когда требуется максимальная общность.

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

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

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

Некоторые реализации коллекций имеют ограничения на элементы, которые они могут содержать. Например, некоторые реализации запрещают нулевые элементы, а некоторые имеют ограничения на типы элементов. Попытка добавить неприемлемый элемент вызывает необработанное исключение, обычно 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 или SequencedCollection.reversed. Любые изменения, внесённые в базовую коллекцию, видны в коллекции-представлении. Соответственно, любые изменения, внесённые в коллекцию-представление (если изменения разрешены), записываются в базовую коллекцию. Хотя они технически не являются коллекциями, экземпляры Iterator и ListIterator также могут позволить записи изменений в базовую коллекцию, а в некоторых случаях изменения в базовой коллекции будут видны итератору во время итерации.

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

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

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

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

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

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

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

Сериализация коллекций

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

Реализации коллекций, которые являются публичными классами (такими как ArrayList или HashMap ), объявляются реализующими интерфейс Serializable , если они на самом деле сериализуемы. Некоторые реализации коллекций не являются публичными классами, такие как неизменяемые коллекции. В таких случаях сериализация таких коллекций описана в спецификации метода, который их создаёт, или в другом подходящем месте. В случаях, когда сериализация коллекции не указана, нет гарантий относительно сериализуемости таких коллекций. В частности, многие коллекции-представления не сериализуемы, даже если исходная коллекция сериализуема.

END_OF_DOCUMENT_MARKER

Реализация коллекции, которая имплементирует интерфейс Serializable, не может гарантированно быть сериализуемой. Причина в том, что, как правило, коллекции содержат элементы других типов, и статически невозможно определить, являются ли экземпляры какого-либо типа элементов на самом деле сериализуемыми. Например, рассмотрите сериализуемую Collection<E>, где E не реализует интерфейс Serializable. Коллекция может быть сериализуемой, если она содержит только элементы некоторого сериализуемого подтипа E, или если она пуста. Таким образом, коллекции называются условно сериализуемыми, так как сериализуемость коллекции в целом зависит от того, сама ли коллекция сериализуема и от того, являются ли все содержащиеся элементы также сериализуемыми.

Дополнительный случай возникает с экземплярами SortedSet и SortedMap. Эти коллекции могут быть созданы с помощью Comparator, который накладывает упорядочение на элементы набора или ключи карты. Такая коллекция сериализуема только в том случае, если предоставленный Comparator также сериализуем.

Этот интерфейс является членом 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, если и только если этот набор содержит по крайней мере один элемент соответствующий указанному, такой что .
Параметры:
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), чтобы контролировать тип массива.

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

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

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

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

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

toArray

default <T> T[] toArray(IntFunction<T[]> generator)
Возвращает массив, содержащий все элементы в этом наборе, используя предоставленную функцию для выделения возвращаемого массива.

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

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

Предположим, — это набор, известно, что он содержит только строки. Следующий код может быть использован для выгрузки набора в новый массив типа 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 - если операция добавления не поддерживается этим набором
ClassCastException - если класс указанного элемента препятствует его добавлению в этот набор
NullPointerException - если указанный элемент равен null, а этот набор не допускает null-элементов
IllegalArgumentException - если какое-либо свойство элемента препятствует его добавлению в этот набор
IllegalStateException - если элемент не может быть добавлен в данный момент из-за ограничений вставки

remove

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

containsAll

boolean containsAll(Collection<?> c)
Возвращает true, если эта коллекция содержит все элементы в указанной коллекции.
Parameters:
c - коллекция, подлежащая проверке на включение в эту коллекцию
Returns:
true, если эта коллекция содержит все элементы в указанной коллекции
Throws:
ClassCastException - если типы одного или нескольких элементов в указанной коллекции несовместимы с этой коллекцией (необязательное)
NullPointerException - если указанная коллекция содержит один или несколько нулевых элементов, а эта коллекция не допускает нулевых элементов (необязательное) или если указанная коллекция равна null.
See Also:
  • contains(Object)

addAll

boolean addAll(Collection<? extends E> c)
Добавляет все элементы из указанной коллекции в эту коллекцию (необязательная операция). Поведение этой операции не определено, если указанная коллекция изменяется во время выполнения операции. (Это означает, что поведение этого вызова не определено, если указанная коллекция — это эта коллекция, а эта коллекция непуста.) Если указанная коллекция имеет определённый порядок обработки, обработка её элементов, как правило, происходит в этом порядке.
Parameters:
c - коллекция, содержащая элементы, которые должны быть добавлены в эту коллекцию
Returns:
true, если эта коллекция изменилась в результате вызова
Throws:
UnsupportedOperationException - если операция добавления не поддерживается этой коллекцией
ClassCastException - если класс элемента указанной коллекции препятствует его добавлению в эту коллекцию
NullPointerException - если указанная коллекция содержит нулевой элемент, а эта коллекция не допускает нулевых элементов, или если указанная коллекция равна null
IllegalArgumentException - если какое-либо свойство элемента указанной коллекции препятствует его добавлению в эту коллекцию
IllegalStateException - если не все элементы могут быть добавлены в данный момент из-за ограничений вставки
See Also:
  • add(Object)

removeAll

boolean removeAll(Collection<?> c)
Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательная операция). После возврата этого вызова эта коллекция не будет иметь общих элементов с указанной коллекцией.
Parameters:
c - коллекция, содержащая элементы, которые должны быть удалены из этой коллекции
Returns:
true, если эта коллекция изменилась в результате вызова
Throws:
UnsupportedOperationException - если метод удаления не поддерживается этой коллекцией
ClassCastException - если типы одного или нескольких элементов в этой коллекции несовместимы с указанной коллекцией (необязательное)
NullPointerException - если эта коллекция содержит один или несколько нулевых элементов, а указанная коллекция не поддерживает нулевые элементы (необязательное) или если указанная коллекция равна null
See Also:
  • remove(Object)
  • contains(Object)

removeIf

default boolean removeIf(Predicate<? super E> filter)
Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату. Ошибки или исключения во время выполнения, сгенерированные во время итерации или предикатом, передаются вызывающей стороне.
Implementation Requirements:
Реализация по умолчанию обходит все элементы коллекции с помощью iterator(). Каждый соответствующий элемент удаляется с помощью Iterator.remove(). Если итератор коллекции не поддерживает удаление, то будет брошено исключение UnsupportedOperationException при первом сопоставлении элемента.
Parameters:
filter - предикат, возвращающий true для элементов, которые нужно удалить
Returns:
true, если какие-либо элементы были удалены
Throws:
NullPointerException - если указанный фильтр равен null
UnsupportedOperationException - если элементы не могут быть удалены из этой коллекции. Реализации могут бросить это исключение, если соответствующий элемент не может быть удалён или если удаление вообще не поддерживается.
Since:
1.8

retainAll

boolean retainAll(Collection<?> c)
Сохраняет только элементы в этой коллекции, которые содержатся в указанной коллекции (необязательная операция). Другими словами, удаляет из этой коллекции все её элементы, которые не содержатся в указанной коллекции.
Parameters:
c - коллекция, содержащая элементы, которые должны быть сохранены в этой коллекции
Returns:
true, если эта коллекция изменилась в результате вызова
Throws:
UnsupportedOperationException - если операция сохранения не поддерживается этой коллекцией
ClassCastException - если типы одного или нескольких элементов в этой коллекции несовместимы с указанной коллекцией (необязательное)
NullPointerException - если эта коллекция содержит один или несколько нулевых элементов, а указанная коллекция не допускает нулевых элементов (необязательное) или если указанная коллекция равна null
See Also:
  • remove(Object)
  • contains(Object)

clear

void clear()
Удаляет все элементы из этой коллекции (необязательная операция). После возврата этого метода коллекция будет пустой.
Throws:
UnsupportedOperationException - если операция очистки не поддерживается этой коллекцией

equals

boolean equals(Object o)
Сравнивает указанный объект с этой коллекцией на равенство.

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

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

Overrides:
equals в классе Object
Parameters:
o - объект, подлежащий сравнению на равенство с этой коллекцией
Returns:
true, если указанный объект равен этой коллекции
See Also:
  • Object.equals(Object)
  • Set.equals(Object)
  • List.equals(Object)

hashCode

int hashCode()
Возвращает значение хэш-кода для этой коллекции. Хотя интерфейс Collection не добавляет никаких условий к общему соглашению для метода hashCode, программисты должны помнить, что любой класс, который переопределяет метод hashCode, должен также переопределить метод equals, чтобы удовлетворить общему соглашению для метода hashCode. В частности, equals подразумевает, что hashCode должен быть одинаковым.
Overrides:
hashCode в классе Object
Returns:
значение хэш-кода для этой коллекции
See Also:
  • 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()) для пустых наборов, и позволяет клиентам определить, охватывает ли такой разделитель какие-либо элементы.

Возвращает:
Spliterator над элементами в этом наборе
С:
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, 2023, 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/21/docs/api/java.base/java/util/Collection.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API