Freigeben über


ICollection Schnittstelle

Definition

Die Stammschnittstelle in der Auflistungshierarchie.

[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
Abgeleitet
Attribute
Implementiert

Hinweise

Die Stammschnittstelle in der Auflistungshierarchie. Eine Auflistung stellt eine Gruppe von -Objekten dar, die als ihre -Elemente bezeichnet werden. Einige Auflistungen lassen doppelte Elemente zu, andere nicht. Einige sind sortiert und andere ungeordnet. Das JDK stellt keine direkten Implementierungen dieser Schnittstelle bereit: Es stellt Implementierungen spezifischerer Unteroberflächen wie Set und Listbereit. Diese Schnittstelle wird in der Regel verwendet, um Sammlungen zu übergeben und sie zu bearbeiten, wenn eine maximale Allgemeinheit gewünscht ist.

Taschen oder Multisets (ungeordnete Sammlungen, die möglicherweise doppelte Elemente enthalten) sollten diese Schnittstelle direkt implementieren.

Alle allgemeinen Implementierungsklassen (die in der Regel indirekt über eine ihrer Unterschnittstellen implementierenCollection) sollten zwei "Standard"-CollectionKonstruktoren bereitstellen: einen void-Konstruktor (keine Argumente), der eine leere Auflistung erstellt, und einen Konstruktor mit einem einzelnen Argument vom Typ Collection, der eine neue Auflistung mit denselben Elementen wie das Argument erstellt. Tatsächlich ermöglicht der letztere Konstruktor dem Benutzer das Kopieren einer beliebigen Auflistung, wodurch eine gleichwertige Auflistung des gewünschten Implementierungstyps erzeugt wird. Es gibt keine Möglichkeit, diese Konvention zu erzwingen (da Schnittstellen keine Konstruktoren enthalten können), aber alle universellen Implementierungen in den Java-Plattformbibliotheken Collection entsprechen.

Bestimmte Methoden werden als optional angegeben. Wenn eine Auflistungsimplementierung keinen bestimmten Vorgang implementiert, sollte sie die entsprechende Methode definieren, um auszulösen UnsupportedOperationException. Solche Methoden sind in den Methodenspezifikationen der Auflistungsschnittstellen als "optionaler Vorgang" gekennzeichnet.

"optional-restrictions">: Einige Sammlungsimplementierungen haben Einschränkungen für die Elemente, die sie enthalten können. Beispielsweise verbieten einige Implementierungen NULL-Elemente, und einige haben Einschränkungen für die Typen ihrer Elemente. Beim Versuch, ein nicht berechtigtes Element hinzuzufügen, wird eine nicht überprüfte Ausnahme ausgelöst, in der Regel NullPointerException oder ClassCastException. Der Versuch, das Vorhandensein eines nicht zulässigen Elements abzufragen, kann eine Ausnahme auslösen oder einfach false zurückgeben. Einige Implementierungen weisen das frühere Verhalten auf, andere zeigen letzteres. Im Allgemeinen kann der Versuch eines Vorgangs für ein nicht förderfähiges Element, dessen Abschluss nicht dazu führen würde, dass ein nicht förderfähiges Element in die Auflistung eingefügt wird, eine Ausnahme auslösen oder nach Möglichkeit der Implementierung erfolgreich sein. Solche Ausnahmen sind in der Spezifikation für diese Schnittstelle als "optional" gekennzeichnet.

Es liegt an jeder Sammlung, ihre eigene Synchronisierungsrichtlinie zu bestimmen. In Ermangelung einer stärkeren Garantie durch die Implementierung kann sich ein undefiniertes Verhalten aus dem Aufruf einer Beliebigen Methode für eine Sammlung ergeben, die von einem anderen Thread mutiert wird. Dies umfasst direkte Aufrufe, das Übergeben der Auflistung an eine Methode, die Aufrufe ausführen kann, und die Verwendung eines vorhandenen Iterators, um die Auflistung zu untersuchen.

Viele Methoden in Collections Framework-Schnittstellen sind im Sinne der Object#equals(Object) equals -Methode definiert. Die Spezifikation für die #contains(Object) contains(Object o) -Methode lautet beispielsweise: "Gibt nur zurück true , wenn diese Auflistung mindestens ein Element e wie das (o==null ? e==null : o.equals(e))enthält." Diese Spezifikation sollte nicht so ausgelegt werden, dass der Aufruf Collection.contains mit einem Argument o ungleich NULL für jedes Element eaufgerufen wirdo.equals(e). Implementierungen können Optimierungen implementieren, bei denen der equals Aufruf vermieden wird, z. B. indem zuerst die Hashcodes der beiden Elemente verglichen werden. (Die Object#hashCode() Spezifikation garantiert, dass zwei Objekte mit ungleichen Hashcodes nicht gleich sein können.) Im Allgemeinen können Implementierungen der verschiedenen Collections Framework-Schnittstellen das angegebene Verhalten der zugrunde liegenden Object Methoden überall dort nutzen, wo es vom Implementor für angemessen erachtet wird.

Einige Sammlungsvorgänge, die rekursive Durchläufe der Auflistung ausführen, können mit einer Ausnahme für selbstreferenzielle Instanzen fehlschlagen, bei denen die Auflistung sich direkt oder indirekt selbst enthält. Dies schließt die clone()Methoden , equals()und hashCode()toString() ein. Implementierungen können optional das selbstreferenzielle Szenario verarbeiten, die meisten aktuellen Implementierungen tun dies jedoch nicht.

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

Die meisten Sammlungen verwalten den Speicher für elemente, die sie enthalten. Im Gegensatz dazu speichern Ansichtssammlungen selbst keine Elemente, sondern sie basieren stattdessen auf einer Unterstützenden Auflistung, um die tatsächlichen Elemente zu speichern. Vorgänge, die nicht von der Ansichtsauflistung selbst verarbeitet werden, werden an die Sicherungsauflistung delegiert. Beispiele für Ansichtssammlungen sind die Wrapperauflistungen, die von Methoden wie Collections#checkedCollection Collections.checkedCollection, Collections#synchronizedCollection Collections.synchronizedCollectionund Collections#unmodifiableCollection Collections.unmodifiableCollectionzurückgegeben werden. Andere Beispiele für Ansichtssammlungen sind Sammlungen, die eine andere Darstellung der gleichen Elemente bereitstellen, z. B. wie von List#subList List.subList, NavigableSet#subSet NavigableSet.subSetoder Map#entrySet Map.entrySetbereitgestellt. Alle Änderungen, die an der Sicherungsauflistung vorgenommen werden, sind in der Ansichtsauflistung sichtbar. Entsprechend &alle Änderungen an der Ansichtsauflistung mdash; , wenn Änderungen &mdash zulässig sind; werden in die Sicherungsauflistung geschrieben. Obwohl es sich bei ihnen technisch gesehen nicht um Sammlungen handelt, können Instanzen von Iterator und ListIterator es auch zulassen, dass Änderungen in die Sicherungsauflistung geschrieben werden, und in einigen Fällen sind Änderungen an der Sicherungsauflistung während der Iteration für den Iterator sichtbar.

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

Bestimmte Methoden dieser Schnittstelle gelten als "destruktiv" und werden als "Mutator"-Methoden bezeichnet, da sie die Gruppe von Objekten ändern, die in der Auflistung enthalten sind, mit der sie arbeiten. Sie können zum Auslösen UnsupportedOperationException angegeben werden, wenn diese Sammlungsimplementierung den Vorgang nicht unterstützt. Solche Methoden sollten (sind aber nicht erforderlich), ein UnsupportedOperationException auszulösen, wenn der Aufruf keine Auswirkungen auf die Auflistung hätte. Betrachten Sie beispielsweise eine Auflistung, die den #add add Vorgang nicht unterstützt. Was geschieht, wenn die #addAll addAll -Methode für diese Auflistung mit einer leeren Auflistung als Argument aufgerufen wird? Das Hinzufügen von Nullelementen hat keine Auswirkung, daher ist es zulässig, dass diese Sammlung einfach nichts tut und keine Ausnahme auslöst. Es wird jedoch empfohlen, dass solche Fälle eine Ausnahme bedingungslos auslösen, da das Auslösen nur in bestimmten Fällen zu Programmierfehlern führen kann.

Eine nicht veränderliche Auflistung ist eine Auflistung, deren alle Mutatormethoden (wie oben definiert) angegeben sind, um auszulösen UnsupportedOperationException. Eine solche Auflistung kann daher nicht durch Aufrufen von Methoden für sie geändert werden. Damit eine Sammlung ordnungsgemäß veränderbar ist, müssen alle von ihr abgeleiteten Ansichtsauflistungen ebenfalls nicht veränderlich sein. Wenn beispielsweise eine Liste nicht modifizierbar ist, ist die von List#subList List.subList zurückgegebene Liste ebenfalls nicht veränderlich.

Eine nicht veränderliche Sammlung ist nicht unbedingt unveränderlich. Wenn die enthaltenen Elemente veränderlich sind, ist die gesamte Auflistung eindeutig veränderlich, auch wenn sie nicht veränderbar ist. Betrachten Sie beispielsweise zwei nicht veränderliche Listen, die veränderliche Elemente enthalten. Das Ergebnis des Aufrufs list1.equals(list2) kann sich von Einem Aufruf zum nächsten unterscheiden, wenn die Elemente mutiert wurden, obwohl beide Listen nicht veränderlich sind. Wenn eine nicht veränderliche Auflistung jedoch alle unveränderlichen Elemente enthält, kann sie als effektiv unveränderlich betrachtet werden.

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

Eine nicht modifizierbare Ansichtsauflistung ist eine Sammlung, die nicht veränderlich ist und auch eine Sicht auf eine Sicherungssammlung ist. Die Mutatormethoden lösen UnsupportedOperationExceptionaus, wie oben beschrieben, während Lese- und Abfragemethoden an die Sicherungsauflistung delegiert werden. Der Effekt besteht darin, schreibgeschützten Zugriff auf die Sicherungsauflistung zu ermöglichen. Dies ist nützlich für eine Komponente, um Benutzern Lesezugriff auf eine interne Sammlung zu gewähren und gleichzeitig zu verhindern, dass sie solche Sammlungen unerwartet ändern. Beispiele für nicht veränderliche Ansichtsauflistungen sind die von den Collections#unmodifiableCollection Collections.unmodifiableCollectionMethoden , Collections#unmodifiableList Collections.unmodifiableListund verwandten Methoden zurückgegeben.

Beachten Sie, dass Änderungen an der Sicherungsauflistung möglicherweise weiterhin möglich sind, und wenn sie auftreten, sind sie über die nicht veränderliche Ansicht sichtbar. Daher ist eine nicht veränderliche Ansichtssammlung nicht unbedingt unveränderlich. Wenn die unterstützende Auflistung einer nicht veränderlichen Ansicht jedoch effektiv unveränderlich ist oder wenn der einzige Verweis auf die Sicherungsauflistung über eine nicht veränderliche Sicht erfolgt, kann die Ansicht als effektiv unveränderlich betrachtet werden.

<h2>"serializable">Serialisierbarkeit von Sammlungen</h2>

Die Serialisierbarkeit von Sammlungen ist optional. Daher wird keine der Auflistungsschnittstellen deklariert, um die java.io.Serializable Schnittstelle zu implementieren. Serialisierbarkeit wird jedoch als allgemein nützlich angesehen, sodass die meisten Sammlungsimplementierungen serialisierbar sind.

Die Auflistungsimplementierungen, die öffentliche Klassen sind (z ArrayList . B. oder ), HashMapwerden deklariert, um die Serializable Schnittstelle zu implementieren, wenn sie tatsächlich serialisierbar sind. Einige Sammlungenimplementierungen sind keine öffentlichen Klassen, z. B. die nicht veränderlichen Sammlungen. In solchen Fällen wird die Serialisierbarkeit solcher Sammlungen in der Spezifikation der Methode beschrieben, die sie erstellt, oder an einer anderen geeigneten Stelle. In Fällen, in denen die Serialisierbarkeit einer Sammlung nicht angegeben ist, gibt es keine Garantie für die Serialisierbarkeit solcher Sammlungen. Insbesondere sind viele Ansichtssammlungen nicht serialisierbar.

Eine Sammlungsimplementierung, die die Serializable Schnittstelle implementiert, kann nicht garantiert werden, dass sie serialisierbar ist. Der Grund ist, dass Sammlungen im Allgemeinen Elemente anderer Typen enthalten, und es nicht möglich ist, statisch zu bestimmen, ob Instanzen eines Elementtyps tatsächlich serialisierbar sind. Betrachten Sie beispielsweise eine serialisierbare Collection<E>, bei der E die Serializable Schnittstelle nicht implementiert wird. Die Auflistung kann serialisierbar sein, wenn sie nur Elemente eines serialisierbaren Untertyps von Eenthält oder wenn sie leer ist. Sammlungen gelten daher als bedingt serialisierbar, da die Serialisierbarkeit der Sammlung als Ganzes davon abhängt, ob die Sammlung selbst serialisierbar ist und ob alle enthaltenen Elemente auch serialisierbar sind.

Ein zusätzlicher Fall tritt bei Instanzen von und auf SortedSetSortedMap. Diese Sammlungen können mit einem Comparator erstellt werden, das eine Reihenfolge für die Setelemente oder Kartenschlüssel vorschreibt. Eine solche Sammlung ist nur serialisierbar, wenn die bereitgestellte Comparator auch serialisierbar ist.

Diese Schnittstelle ist Mitglied des Java Collections Framework.

In Version 1.2 hinzugefügt.

Java-Dokumentation für java.util.Collection.

Teile dieser Seite sind Änderungen, die auf Arbeiten basieren, die vom Android Open Source Project erstellt und freigegeben wurden und gemäß den In der Attribution License beschriebenen Begriffen verwendet werden.

Eigenschaften

Handle

Ruft den JNI-Wert des zugrunde liegenden Android-Objekts ab.

(Geerbt von IJavaObject)
IsEmpty

Gibt zurück, wenn diese Collection keine Elemente enthält.

JniIdentityHashCode

Gibt den Wert von java.lang.System.identityHashCode() für die umschlossene instance zurück.

(Geerbt von IJavaPeerable)
JniManagedPeerState

Status des verwalteten Peers.

(Geerbt von IJavaPeerable)
JniPeerMembers

Unterstützung für Zugriff und Aufruf von Mitgliedern.

(Geerbt von IJavaPeerable)
PeerReference

Gibt einen JniObjectReference des umschlossenen Java-Objekts instance zurück.

(Geerbt von IJavaPeerable)

Methoden

Add(Object)

Stellt sicher, dass diese Auflistung das angegebene Element enthält (optionaler Vorgang).

AddAll(ICollection)

Fügt dieser Auflistung alle Elemente in der angegebenen Auflistung hinzu (optionaler Vorgang).

Clear()

Entfernt alle Elemente aus dieser Auflistung (optionaler Vorgang).

Contains(Object)

Gibt zurück true , wenn diese Auflistung das angegebene Element enthält.

ContainsAll(ICollection)

Gibt zurück true , wenn diese Auflistung alle Elemente in der angegebenen Auflistung enthält.

Disposed()

Wird aufgerufen, wenn die instance gelöscht wurde.

(Geerbt von IJavaPeerable)
DisposeUnlessReferenced()

Wenn keine ausstehenden Verweise auf diese instance vorhanden sind, ruft aufDispose(). Andernfalls wird nichts ausgeführt.

(Geerbt von IJavaPeerable)
Equals(Object)

Vergleicht das angegebene Objekt auf Gleichheit mit dieser Auflistung.

Finalized()

Wird aufgerufen, wenn die instance abgeschlossen wurde.

(Geerbt von IJavaPeerable)
ForEach(IConsumer)

Führt die angegebene Aktion für jedes Element des aus, Iterable bis alle Elemente verarbeitet wurden oder die Aktion eine Ausnahme auslöst.

(Geerbt von IIterable)
GetHashCode()

Gibt den Hashcodewert für diese Auflistung zurück.

Iterator()

Gibt einen Iterator für die Elemente in dieser Auflistung zurück.

Remove(Object)

Entfernt eine einzelne instance des angegebenen Elements aus dieser Auflistung, sofern vorhanden (optionaler Vorgang).

RemoveAll(ICollection)

Entfernt alle Elemente dieser Auflistung, die auch in der angegebenen Auflistung enthalten sind (optionaler Vorgang).

RemoveIf(IPredicate)

Entfernt alle Elemente dieser Auflistung, die dem angegebenen Prädikat entsprechen.

RetainAll(ICollection)

Behält nur die Elemente in dieser Auflistung bei, die in der angegebenen Auflistung enthalten sind (optionaler Vorgang).

SetJniIdentityHashCode(Int32)

Legen Sie den von JniIdentityHashCodezurückgegebenen Wert fest.

(Geerbt von IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Die Stammschnittstelle in der Auflistungshierarchie.

(Geerbt von IJavaPeerable)
SetPeerReference(JniObjectReference)

Legen Sie den von PeerReferencezurückgegebenen Wert fest.

(Geerbt von IJavaPeerable)
Size()

Gibt die Anzahl der Elemente in dieser Auflistung zurück.

Spliterator()

Erstellt eine Spliterator über den von dieser Iterablebeschriebenen Elemente.

(Geerbt von IIterable)
ToArray()

Gibt ein Array zurück, das alle Elemente in dieser Auflistung enthält.

ToArray(IIntFunction)

Gibt ein Array zurück, das alle Elemente in dieser Auflistung enthält, wobei die bereitgestellte generator Funktion verwendet wird, um das zurückgegebene Array zuzuordnen.

ToArray(Object[])

Gibt ein Array zurück, das alle Elemente in dieser Auflistung enthält. Der Laufzeittyp des zurückgegebenen Arrays ist der des angegebenen Arrays.

UnregisterFromRuntime()

Heben Sie die Registrierung dieses instance auf, damit die Laufzeit sie nicht von zukünftigen Java.Interop.JniRuntime+JniValueManager.PeekValue Aufrufen zurückgibt.

(Geerbt von IJavaPeerable)

Explizite Schnittstellenimplementierungen

IIterable.Spliterator()

Erstellt einen Spliterator über den Elementen in dieser Auflistung.

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

Führt eine Typkonvertierung mit Überprüfung der Android-Laufzeit aus.

JavaCast<TResult>(IJavaObject)

Die Stammschnittstelle in der Auflistungshierarchie.

GetJniTypeName(IJavaPeerable)

Die Stammschnittstelle in der Auflistungshierarchie.

ToEnumerable(IIterable)

Die Stammschnittstelle in der Auflistungshierarchie.

ToEnumerable<T>(IIterable)

Die Stammschnittstelle in der Auflistungshierarchie.

Gilt für: