Поделиться через


ICollection Интерфейс

Определение

Корневой интерфейс в иерархии коллекции.

[Android.Runtime.Register("java/util/Collection", "", "Java.Util.ICollectionInvoker")]
[Java.Interop.JavaTypeParameters(new System.String[] { "E" })]
public interface ICollection : IDisposable, Java.Interop.IJavaPeerable, Java.Lang.IIterable
[<Android.Runtime.Register("java/util/Collection", "", "Java.Util.ICollectionInvoker")>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "E" })>]
type ICollection = interface
    interface IIterable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
Производный
Атрибуты
Реализации

Комментарии

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

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

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

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

"Необязательные ограничения">Некоторые реализации коллекции имеют ограничения на элементы, которые они могут содержать. Например, некоторые реализации запрещают пустые элементы, а некоторые имеют ограничения на типы их элементов. При попытке добавить неуправляемый элемент возникает исключение без проверки, обычно NullPointerException или ClassCastException. Попытка запросить наличие неучитаемого элемента может вызвать исключение или просто возвращать значение false; некоторые реализации будут проявлять прежнее поведение, и некоторые будут демонстрировать последний. Как правило, попытка выполнить операцию с необязаемым элементом, завершение которого не приведет к вставке неуклюжего элемента в коллекцию, может вызвать исключение или может завершиться успешно, при выборе реализации. Такие исключения помечены как необязательные в спецификации этого интерфейса.

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

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

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

<h2>"view">View Collections</h2>

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

<h2>"unmodifiable">Unmodifiable Collections</h2>

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

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

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

<h2>"unmodview">Unmodifiable View Collections</h2>

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

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

<h2>"serializable">Serializability of Collections</h2>

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

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

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

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

Этот интерфейс является членом Платформы коллекций Java.

Добавлено в версии 1.2.

Документация по Java для java.util.Collection.

Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.

Свойства

Handle

Возвращает значение JNI базового объекта Android.

(Унаследовано от IJavaObject)
IsEmpty

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

JniIdentityHashCode

Возвращает значение java.lang.System.identityHashCode() для упаковаемого экземпляра.

(Унаследовано от IJavaPeerable)
JniManagedPeerState

Состояние управляемого однорангового узла.

(Унаследовано от IJavaPeerable)
JniPeerMembers

Поддержка доступа к членам и вызовов.

(Унаследовано от IJavaPeerable)
PeerReference

JniObjectReference Возвращает экземпляр объекта Java в оболочке.

(Унаследовано от IJavaPeerable)

Методы

Add(Object)

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

AddAll(ICollection)

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

Clear()

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

Contains(Object)

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

ContainsAll(ICollection)

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

Disposed()

Вызывается при удалении экземпляра.

(Унаследовано от IJavaPeerable)
DisposeUnlessReferenced()

Если нет невыполненных ссылок на этот экземпляр, то вызывается Dispose(); в противном случае ничего не делает.

(Унаследовано от IJavaPeerable)
Equals(Object)

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

Finalized()

Вызывается при завершении экземпляра.

(Унаследовано от IJavaPeerable)
ForEach(IConsumer)

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

(Унаследовано от IIterable)
GetHashCode()

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

Iterator()

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

Remove(Object)

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

RemoveAll(ICollection)

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

RemoveIf(IPredicate)

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

RetainAll(ICollection)

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

SetJniIdentityHashCode(Int32)

Задайте значение, возвращаемое JniIdentityHashCode.

(Унаследовано от IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Корневой интерфейс в иерархии коллекции.

(Унаследовано от IJavaPeerable)
SetPeerReference(JniObjectReference)

Задайте значение, возвращаемое PeerReference.

(Унаследовано от IJavaPeerable)
Size()

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

Spliterator()

Spliterator Создает над элементами, описанными в этом разделеIterable.

(Унаследовано от IIterable)
ToArray()

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

ToArray(IIntFunction)

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

ToArray(Object[])

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

UnregisterFromRuntime()

Отмените регистрацию этого экземпляра, чтобы среда выполнения не возвращала ее из будущих Java.Interop.JniRuntime+JniValueManager.PeekValue вызовов.

(Унаследовано от IJavaPeerable)

Явные реализации интерфейса

IIterable.Spliterator()

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

Методы расширения

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверяемого средой выполнения Android.

JavaCast<TResult>(IJavaObject)

Корневой интерфейс в иерархии коллекции.

GetJniTypeName(IJavaPeerable)

Корневой интерфейс в иерархии коллекции.

ToEnumerable(IIterable)

Корневой интерфейс в иерархии коллекции.

ToEnumerable<T>(IIterable)

Корневой интерфейс в иерархии коллекции.

Применяется к