Интерфейс Collection<E>
- Параметры типа:
-
E- тип элементов в этом наборе
- Все суперинтерфейсы:
- Iterable<E>
- Все известные подинтерфейсы:
- BeanContext, BeanContextServices, BlockingDeque<E>, BlockingQueue<E>, Deque<E>, 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 платформы соответствуют ей.
«Деструктивные» методы, содержащиеся в этом интерфейсе, то есть методы, изменяющие коллекцию, на которой они работают, указаны так, что выбросят UnsupportedOperationException, если эта коллекция не поддерживает операцию. В этом случае эти методы могут, но не обязаны, выбросить UnsupportedOperationException, если вызов не окажет никакого влияния на коллекцию. Например, вызов метода addAll(Collection) на неизменяемой коллекции может, но не обязан, выбросить исключение, если добавляемая коллекция пуста.
Некоторые реализации коллекций имеют ограничения на элементы, которые они могут содержать. Например, некоторые реализации запрещают 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(). Реализации могут выборочно обрабатывать сценарии самоссылки, однако большинство текущих реализаций этого не делают.
Этот интерфейс является членом 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) Возвращает |
boolean |
containsAll(Collection<?> c) Возвращает |
boolean |
equals(Object o) Сравнивает указанный объект с этой коллекцией на равенство. |
int |
hashCode() Возвращает значение хэш-кода для этой коллекции. |
boolean |
isEmpty() Возвращает |
Iterator<E> |
iterator() Возвращает итератор по элементам в этой коллекции. |
default Stream<E> |
parallelStream() Возвращает, возможно, параллельный |
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() Создаёт |
default Stream<E> |
stream() Возвращает последовательный |
Object[] |
toArray() Возвращает массив, содержащий все элементы в этой коллекции. |
<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 такой, что (o==null ? e==null : o.equals(e)).
- Параметры:
-
o- элемент, присутствие которого в этом наборе необходимо проверить - Возвращает:
-
trueесли этот набор содержит указанный элемент - Исключения:
-
ClassCastException- если тип указанного элемента несовместим с этим набором (необязательно) -
NullPointerException- если указанный элемент равен null, а этот набор не допускает null-элементы (необязательно)
iterator
Iterator<E> iterator()
Возвращает итератор по элементам в этом наборе. Гарантий относительно порядка возвращения элементов нет (за исключением случаев, когда этот набор является экземпляром класса, предоставляющего такую гарантию).
toArray
Object[] toArray()
Возвращает массив, содержащий все элементы в этом наборе. Если этот набор гарантирует какой-либо порядок возвращения элементов своим итератором, этот метод должен возвращать элементы в том же порядке.
Возвращаемый массив будет «безопасным» в том смысле, что к нему не сохраняются ссылки этим набором. (Другими словами, этот метод должен выделять новый массив, даже если этот набор подкреплен массивом). Вызывающая сторона свободна изменять возвращаемый массив.
Этот метод служит мостом между основанными на массивах и основанными на коллекциях API.
- Возвращает:
- массив, содержащий все элементы в этом наборе
toArray
<T> T[] toArray(T[] a)
Возвращает массив, содержащий все элементы в этом наборе; тип времени выполнения возвращаемого массива — тип указанного массива. Если набор помещается в указанный массив, он возвращается в нём. В противном случае выделяется новый массив с типом времени выполнения указанного массива и размером этого набора.
Если этот набор помещается в указанный массив с избытком (т. е. массив имеет больше элементов, чем этот набор), элемент в массиве, непосредственно следующий за концом набора, устанавливается в null. (Это полезно для определения длины этого набора только если вызывающая сторона знает, что этот набор не содержит каких-либо null элементов.)
Если этот набор гарантирует какой-либо порядок возвращения элементов своим итератором, этот метод должен возвращать элементы в том же порядке.
Как и метод toArray(), этот метод служит мостом между основанными на массивах и основанными на коллекциях API. Кроме того, этот метод позволяет точно контролировать тип времени выполнения выходного массива и может в определённых обстоятельствах использоваться для экономии расходов на выделение памяти.
Предположим, x — это набор, известно, что он содержит только строки. Следующий код может быть использован для выгрузки набора в недавно выделенный массив String:
String[] y = x.toArray(new String[0]);Обратите внимание, что
toArray(new Object[0]) идентичен по функции toArray().- Параметры типа:
-
T- тип времени выполнения массива, который будет содержать набор - Параметры:
-
a- массив, в который должны быть помещены элементы этого набора, если он достаточно велик; в противном случае для этой цели выделяется новый массив того же типа времени выполнения. - Возвращает:
- массив, содержащий все элементы в этом наборе
- Исключения:
-
ArrayStoreException- если тип времени выполнения указанного массива не является супертипом типа времени выполнения каждого элемента в этом наборе -
NullPointerException- если указанный массив равен null
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 такой, что (o==null ? e==null : o.equals(e)), если этот набор содержит один или несколько таких элементов. Возвращает true если этот набор содержал указанный элемент (или, что эквивалентно, если этот набор изменился в результате вызова).
- Параметры:
-
o- элемент, который необходимо удалить из этого набора, если он присутствует - Возвращает:
-
trueесли элемент был удалён в результате этого вызова - Исключения:
-
ClassCastException- если тип указанного элемента несовместим с этим набором (необязательно) -
NullPointerException- если указанный элемент равен null, а этот набор не допускает null-элементы (необязательно) -
UnsupportedOperationException- если операцияremoveне поддерживается этим набором
containsAll
boolean containsAll(Collection<?> c)
Возвращает true если этот набор содержит все элементы в указанном наборе.
- Параметры:
-
c- набор, проверяемый на наличие в этом наборе - Возвращает:
-
trueесли этот набор содержит все элементы в указанном наборе - Исключения:
-
ClassCastException- если типы одного или нескольких элементов в указанном наборе несовместимы с этим набором (необязательно) -
NullPointerException- если указанный набор содержит один или несколько null-элементов, а этот набор не допускает null-элементы (необязательно), или если указанный набор равен null. - См. также:
contains(Object)
addAll
boolean addAll(Collection<? extends E> c)
Добавляет все элементы из указанного набора в этот набор (необязательная операция). Поведение этой операции не определено, если указанный набор изменяется во время выполнения операции. (Это подразумевает, что поведение этого вызова не определено, если указанный набор — это этот набор, и этот набор непуст.)
- Параметры:
-
c- набор, содержащий элементы, которые нужно добавить в этот набор - Возвращает:
-
trueесли этот набор изменился в результате вызова - Исключения:
-
UnsupportedOperationException- если операцияaddAllне поддерживается этим набором -
ClassCastException- если класс элемента указанного набора препятствует его добавлению в этот набор -
NullPointerException- если указанный набор содержит null-элемент, а этот набор не допускает null-элементы, или если указанный набор равен 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- если элементы не могут быть удалены из этой коллекции. Реализации могут выбросить это исключение, если соответствующий элемент не может быть удален или если в целом удаление не поддерживается. - C момента:
- 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> - Требования к реализации:
- Стандартная реализация создает отложенно-связанный разделитель из итератора коллекции. Разделитель наследует свойства fail-fast итератора коллекции.
Созданный
SpliteratorсообщаетSpliterator.SIZED. - Примечание к реализации:
- Созданный
Spliteratorдополнительно сообщаетSpliterator.SUBSIZED.Если разделитель не охватывает ни одного элемента, то сообщение дополнительных характеристик, помимо
SIZEDиSUBSIZED, не помогает клиентам контролировать, специализировать или упрощать вычисления. Однако это позволяет совместно использовать неизменяемый и пустой экземпляр разделителя (см.Spliterators.emptySpliterator()) для пустых коллекций и позволяет клиентам определить, охватывает ли такой разделитель какие-либо элементы. - Возвращает:
Spliteratorнад элементами в этой коллекции- C момента:
- 1.8
stream
default Stream<E> stream()
Возвращает последовательный Stream с этой коллекцией в качестве источника.
Этот метод следует переопределить, если метод spliterator() не может вернуть разделитель, который является IMMUTABLE, CONCURRENT, или отложенно-связанным. (См. spliterator() для получения подробностей.)
- Требования к реализации:
- Стандартная реализация создает последовательный
Streamиз итератора коллекции. - Возвращает:
- последовательный
Streamнад элементами в этой коллекции - C момента:
- 1.8
parallelStream
default Stream<E> parallelStream()
Возвращает потенциально параллельный Stream с этой коллекцией в качестве источника. Допускается, что этот метод возвращает последовательный поток.
Этот метод следует переопределить, если метод spliterator() не может вернуть разделитель, который является IMMUTABLE, CONCURRENT, или отложенно-связанным. (См. spliterator() для получения подробностей.)
- Требования к реализации:
- Стандартная реализация создает параллельный
Streamиз итератора коллекции. - Возвращает:
- потенциально параллельный
Streamнад элементами в этой коллекции - C момента:
- 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.