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 |
Возвращает, если этот |
JniIdentityHashCode |
Возвращает значение |
JniManagedPeerState |
Состояние управляемого однорангового узла. (Унаследовано от IJavaPeerable) |
JniPeerMembers |
Поддержка доступа к членам и вызовов. (Унаследовано от IJavaPeerable) |
PeerReference |
JniObjectReference Возвращает экземпляр объекта Java в оболочке. (Унаследовано от IJavaPeerable) |
Методы
Add(Object) |
Гарантирует, что эта коллекция содержит указанный элемент (необязательная операция). |
AddAll(ICollection) |
Добавляет все элементы указанной коллекции в эту коллекцию (необязательно). |
Clear() |
Удаляет все элементы из этой коллекции (необязательной операции). |
Contains(Object) |
Возвращает, |
ContainsAll(ICollection) |
Возвращает, |
Disposed() |
Вызывается при удалении экземпляра. (Унаследовано от IJavaPeerable) |
DisposeUnlessReferenced() |
Если нет невыполненных ссылок на этот экземпляр, то вызывается |
Equals(Object) |
Сравнивает указанный объект с этой коллекцией для равенства. |
Finalized() |
Вызывается при завершении экземпляра. (Унаследовано от IJavaPeerable) |
ForEach(IConsumer) |
Выполняет заданное действие для каждого элемента |
GetHashCode() |
Возвращает хэш-значение кода для этой коллекции. |
Iterator() |
Возвращает итератор по элементам в этой коллекции. |
Remove(Object) |
Удаляет один экземпляр указанного элемента из этой коллекции, если он присутствует (необязательно). |
RemoveAll(ICollection) |
Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательной операции). |
RemoveIf(IPredicate) |
Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату. |
RetainAll(ICollection) |
Сохраняет только элементы этой коллекции, содержащиеся в указанной коллекции (необязательной операции). |
SetJniIdentityHashCode(Int32) |
Задайте значение, возвращаемое |
SetJniManagedPeerState(JniManagedPeerStates) |
Корневой интерфейс в иерархии коллекции. (Унаследовано от IJavaPeerable) |
SetPeerReference(JniObjectReference) |
Задайте значение, возвращаемое |
Size() |
Возвращает количество элементов в этой коллекции. |
Spliterator() |
|
ToArray() |
Возвращает массив, содержащий все элементы в этой коллекции. |
ToArray(IIntFunction) |
Возвращает массив, содержащий все элементы в этой коллекции, используя предоставленную |
ToArray(Object[]) |
Возвращает массив, содержащий все элементы в этой коллекции; Тип среды выполнения возвращаемого массива — это тип указанного массива. |
UnregisterFromRuntime() |
Отмените регистрацию этого экземпляра, чтобы среда выполнения не возвращала ее из будущих Java.Interop.JniRuntime+JniValueManager.PeekValue вызовов. (Унаследовано от IJavaPeerable) |
Явные реализации интерфейса
IIterable.Spliterator() |
|
Методы расширения
JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
JavaCast<TResult>(IJavaObject) |
Корневой интерфейс в иерархии коллекции. |
GetJniTypeName(IJavaPeerable) |
Корневой интерфейс в иерархии коллекции. |
ToEnumerable(IIterable) |
Корневой интерфейс в иерархии коллекции. |
ToEnumerable<T>(IIterable) |
Корневой интерфейс в иерархии коллекции. |