Интерфейс 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 , если они на самом деле сериализуемы. Некоторые реализации коллекций не являются публичными классами, такие как неизменяемые коллекции. В таких случаях сериализация таких коллекций описана в спецификации метода, который их создаёт, или в другом подходящем месте. В случаях, когда сериализация коллекции не указана, нет гарантий относительно сериализуемости таких коллекций. В частности, многие коллекции-представления не сериализуемы, даже если исходная коллекция сериализуема.
Реализация коллекции, которая имплементирует интерфейс Serializable, не может гарантированно быть сериализуемой. Причина в том, что, как правило, коллекции содержат элементы других типов, и статически невозможно определить, являются ли экземпляры какого-либо типа элементов на самом деле сериализуемыми. Например, рассмотрите сериализуемую Collection<E>, где E не реализует интерфейс Serializable. Коллекция может быть сериализуемой, если она содержит только элементы некоторого сериализуемого подтипа E, или если она пуста. Таким образом, коллекции называются условно сериализуемыми, так как сериализуемость коллекции в целом зависит от того, сама ли коллекция сериализуема и от того, являются ли все содержащиеся элементы также сериализуемыми.
Дополнительный случай возникает с экземплярами SortedSet и SortedMap. Эти коллекции могут быть созданы с помощью Comparator, который накладывает упорядочение на элементы набора или ключи карты. Такая коллекция сериализуема только в том случае, если предоставленный Comparator также сериализуем.
Этот интерфейс является членом Java Collections Framework.
- Требования к реализации:
- Реализации по умолчанию (унаследованные или иные) не применяют никакой протокол синхронизации. Если реализация
Collectionимеет определенный протокол синхронизации, то она должна переопределить реализации по умолчанию, чтобы применить этот протокол. - С тех пор:
- 1.2
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
add |
Обеспечивает, что эта коллекция содержит указанный элемент (необязательная операция). |
boolean |
addAll |
Добавляет все элементы из указанной коллекции в эту коллекцию (необязательная операция). |
void |
clear() |
Удаляет все элементы из этой коллекции (необязательная операция). |
boolean |
contains |
Возвращает `true`, если эта коллекция содержит указанный элемент. |
boolean |
containsAll |
Возвращает `true`, если эта коллекция содержит все элементы из указанной коллекции. |
boolean |
equals |
Сравнивает указанный объект с этой коллекцией на предмет равенства. |
int |
hashCode() |
Возвращает значение хэш-кода для этой коллекции. |
boolean |
isEmpty() |
Возвращает `true`, если эта коллекция не содержит элементов. |
Iterator |
iterator() |
Возвращает итератор по элементам в этой коллекции. |
default Stream |
parallelStream() |
Возвращает, возможно, параллельный Stream с этой коллекцией в качестве источника. |
boolean |
remove |
Удаляет единственный экземпляр указанного элемента из этой коллекции, если он присутствует (необязательная операция). |
boolean |
removeAll |
Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательная операция). |
default boolean |
removeIf |
Удаляет все элементы этой коллекции, которые удовлетворяют заданному предикату. |
boolean |
retainAll |
Сохраняет только элементы в этой коллекции, которые содержатся в указанной коллекции (необязательная операция). |
int |
size() |
Возвращает количество элементов в этой коллекции. |
default Spliterator |
spliterator() |
Создает Spliterator над элементами в этой коллекции. |
default Stream |
stream() |
Возвращает последовательный Stream с этой коллекцией в качестве источника. |
Object[] |
toArray() |
Возвращает массив, содержащий все элементы в этой коллекции. |
default <T> T[] |
toArray |
Возвращает массив, содержащий все элементы в этой коллекции, используя предоставленную функцию generator для выделения возвращаемого массива. |
<T> T[] |
toArray |
Возвращает массив, содержащий все элементы в этой коллекции; тип времени выполнения возвращаемого массива такой же, как и у указанного массива. |
Подробное описание методов
size
int size()
Integer.MAX_VALUE элементов, возвращает Integer.MAX_VALUE. - Возвращает:
- количество элементов в этом наборе
isEmpty
boolean isEmpty()
true, если этот набор не содержит элементов.- Возвращает:
-
trueесли этот набор не содержит элементов
contains
boolean contains(Object o)
- Параметры:
-
o- элемент, чье присутствие в этом наборе необходимо проверить - Возвращает:
- true если этот набор содержит указанный элемент
- Исключения:
-
ClassCastException- если тип указанного элемента несовместим с этим набором (необязательно) -
NullPointerException- если указанный элемент равен null, а этот набор не допускает null-элементов (необязательно)
iterator
Iterator<E> iterator()
- Определено в:
-
iteratorв интерфейсеIterable<E> - Возвращает:
- итератор по элементам в этом наборе
toArray
Object[] toArray()
Возвращаемый массив является "безопасным" в том смысле, что к нему не сохраняются ссылки этого набора. (Другими словами, этот метод должен выделять новый массив, даже если этот набор поддерживается массивом). Таким образом, вызывающий метод может свободно изменять возвращаемый массив.
- Примечание 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)
Наборы, которые поддерживают эту операцию, могут накладывать ограничения на добавляемые элементы. В частности, некоторые наборы откажутся добавлять null элементы, а другие наложат ограничения на тип добавляемых элементов. Классы наборов должны чётко указывать в своей документации любые ограничения на добавляемые элементы.
Если набор откажется добавить конкретный элемент по любой причине, кроме уже имеющегося элемента, он *должен* выбросить исключение (а не вернуть false). Это сохраняет инвариант, что набор всегда содержит указанный элемент после возврата из этого вызова.
- Параметры:
-
e- элемент, чье присутствие в этом наборе необходимо обеспечить - Возвращает:
- true если этот набор изменился в результате вызова
- Исключения:
-
UnsupportedOperationException- если операция добавления не поддерживается этим набором -
ClassCastException- если класс указанного элемента препятствует его добавлению в этот набор -
NullPointerException- если указанный элемент равен null, а этот набор не допускает null-элементов -
IllegalArgumentException- если какое-либо свойство элемента препятствует его добавлению в этот набор -
IllegalStateException- если элемент не может быть добавлен в данный момент из-за ограничений вставки
remove
boolean remove(Object o)
- Параметры:
-
o- элемент, который необходимо удалить из этого набора, если он присутствует - Возвращает:
- true если элемент был удален в результате этого вызова
- Исключения:
-
ClassCastException- если тип указанного элемента несовместим с этим набором (необязательно) -
NullPointerException- если указанный элемент равен null, а этот набор не допускает null-элементов (необязательно) -
UnsupportedOperationException- если операция удаления не поддерживается этим набором
containsAll
boolean containsAll(Collection<?> c)
- Parameters:
-
c- коллекция, подлежащая проверке на включение в эту коллекцию - Returns:
- true, если эта коллекция содержит все элементы в указанной коллекции
- Throws:
-
ClassCastException- если типы одного или нескольких элементов в указанной коллекции несовместимы с этой коллекцией (необязательное) -
NullPointerException- если указанная коллекция содержит один или несколько нулевых элементов, а эта коллекция не допускает нулевых элементов (необязательное) или если указанная коллекция равна null. - See Also:
addAll
boolean addAll(Collection<? extends E> c)
- Parameters:
-
c- коллекция, содержащая элементы, которые должны быть добавлены в эту коллекцию - Returns:
- true, если эта коллекция изменилась в результате вызова
- Throws:
-
UnsupportedOperationException- если операция добавления не поддерживается этой коллекцией -
ClassCastException- если класс элемента указанной коллекции препятствует его добавлению в эту коллекцию -
NullPointerException- если указанная коллекция содержит нулевой элемент, а эта коллекция не допускает нулевых элементов, или если указанная коллекция равна null -
IllegalArgumentException- если какое-либо свойство элемента указанной коллекции препятствует его добавлению в эту коллекцию -
IllegalStateException- если не все элементы могут быть добавлены в данный момент из-за ограничений вставки - See Also:
removeAll
boolean removeAll(Collection<?> c)
- Parameters:
-
c- коллекция, содержащая элементы, которые должны быть удалены из этой коллекции - Returns:
- true, если эта коллекция изменилась в результате вызова
- Throws:
-
UnsupportedOperationException- если метод удаления не поддерживается этой коллекцией -
ClassCastException- если типы одного или нескольких элементов в этой коллекции несовместимы с указанной коллекцией (необязательное) -
NullPointerException- если эта коллекция содержит один или несколько нулевых элементов, а указанная коллекция не поддерживает нулевые элементы (необязательное) или если указанная коллекция равна null - See Also:
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:
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:
hashCode
int hashCode()
- Overrides:
-
hashCodeв классеObject - Returns:
- значение хэш-кода для этой коллекции
- See Also:
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