ICollection Interfaccia
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Interfaccia radice nella gerarchia di raccolta.
[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
- Derivato
- Attributi
- Implementazioni
Commenti
Interfaccia radice nella gerarchia di raccolta. Un insieme rappresenta un gruppo di oggetti, noti come elementi. Alcune raccolte consentono elementi duplicati e altri no. Alcuni sono ordinati e altri non ordinati. JDK non fornisce implementazioni dirette di questa interfaccia: fornisce implementazioni di sottointerfazioni più specifiche come Set
e List
. Questa interfaccia viene in genere usata per passare le raccolte e modificarle in base alla massima generalità desiderata.
I contenitori o i multiset (raccolte non ordinate che possono contenere elementi duplicati) devono implementare direttamente questa interfaccia.
Tutte le classi di implementazione per utilizzo Collection
generico (che in genere implementano Collection
indirettamente tramite una delle relative sottointerfazioni) devono fornire due costruttori "standard": un costruttore void (nessun argomento), che crea una raccolta vuota e un costruttore con un singolo argomento di tipo Collection
, che crea una nuova raccolta con gli stessi elementi del relativo argomento. In effetti, quest'ultimo costruttore consente all'utente di copiare qualsiasi raccolta, producendo una raccolta equivalente del tipo di implementazione desiderato. Non è possibile applicare questa convenzione (perché le interfacce non possono contenere costruttori), ma tutte le implementazioni per utilizzo Collection
generico nelle librerie della piattaforma Java sono conformi.
Alcuni metodi vengono specificati come facoltativi. Se un'implementazione di una raccolta non implementa una particolare operazione, deve definire il metodo corrispondente per generare UnsupportedOperationException
. Tali metodi sono contrassegnati come "operazione facoltativa" nelle specifiche del metodo delle interfacce delle raccolte.
"restrizioni facoltative">Alcune implementazioni della raccolta hanno restrizioni sugli elementi che possono contenere. Ad esempio, alcune implementazioni impediscono gli elementi Null e alcune hanno restrizioni sui tipi dei relativi elementi. Il tentativo di aggiungere un elemento non idoneo genera un'eccezione deselezionata, in genere NullPointerException
o ClassCastException
. Il tentativo di eseguire una query sulla presenza di un elemento non idoneo può generare un'eccezione oppure può semplicemente restituire false; alcune implementazioni mostreranno il comportamento precedente e alcune mostreranno quest'ultima. In genere, il tentativo di un'operazione su un elemento non idoneo il cui completamento non comporta l'inserimento di un elemento non idoneo nella raccolta può generare un'eccezione o potrebbe avere esito positivo, all'opzione dell'implementazione. Tali eccezioni vengono contrassegnate come "facoltative" nella specifica per questa interfaccia.
Spetta a ogni raccolta determinare i propri criteri di sincronizzazione. In assenza di una garanzia più forte dall'implementazione, il comportamento non definito può derivare dalla chiamata di qualsiasi metodo in una raccolta che viene modificata da un altro thread; sono incluse le chiamate dirette, il passaggio della raccolta a un metodo che potrebbe eseguire chiamate e l'uso di un iteratore esistente per esaminare la raccolta.
Molti metodi nelle interfacce di Collections Framework sono definiti in termini di Object#equals(Object) equals
metodo. Ad esempio, la specifica per il #contains(Object) contains(Object o)
metodo indica: "restituisce true
se e solo se questa raccolta contiene almeno un elemento e
in modo che (o==null ? e==null : o.equals(e))
". Questa specifica non deve essere interpretata per indicare che richiamare Collection.contains
con un argomento o
non Null verrà o.equals(e)
richiamato per qualsiasi elemento e
. Le implementazioni sono libere di implementare ottimizzazioni in base al quale la equals
chiamata viene evitata, ad esempio confrontando prima i codici hash dei due elementi. La Object#hashCode()
specifica garantisce che due oggetti con codici hash diversi non possano essere uguali. Più in generale, le implementazioni delle varie interfacce di Collections Framework sono libere di sfruttare il comportamento specificato dei metodi sottostanti Object
ovunque l'implementatore lo consideri appropriato.
Alcune operazioni di raccolta che eseguono attraversamento ricorsivo della raccolta possono non riuscire con un'eccezione per le istanze autoferenziale in cui la raccolta contiene direttamente o indirettamente. Sono inclusi i clone()
metodi , hashCode()
equals()
e toString()
. Le implementazioni possono facoltativamente gestire lo scenario auto-referenziale, ma le implementazioni più correnti non lo fanno.
<h2>"view">View Collections</h2>
La maggior parte delle raccolte gestisce l'archiviazione per gli elementi che contengono. Al contrario, le raccolte di viste non archiviano gli elementi, ma si basano su una raccolta di backup per archiviare gli elementi effettivi. Le operazioni non gestite dalla raccolta di viste vengono delegate alla raccolta di backup. Esempi di raccolte di viste includono le raccolte wrapper restituite da metodi come Collections#checkedCollection Collections.checkedCollection
, Collections#synchronizedCollection Collections.synchronizedCollection
e Collections#unmodifiableCollection Collections.unmodifiableCollection
. Altri esempi di raccolte di viste includono raccolte che forniscono una rappresentazione diversa degli stessi elementi, ad esempio, come fornito da List#subList List.subList
, NavigableSet#subSet NavigableSet.subSet
o Map#entrySet Map.entrySet
. Tutte le modifiche apportate all'insieme di backup sono visibili nella raccolta di visualizzazioni. In modo corrispondente, tutte le modifiche apportate alla raccolta di visualizzazioni — se le modifiche sono consentite — vengono scritti nella raccolta di backup. Anche se tecnicamente non sono raccolte, le istanze di Iterator
e ListIterator
possono anche consentire la scrittura delle modifiche nella raccolta di backup e in alcuni casi le modifiche alla raccolta di supporto saranno visibili all'iteratore durante l'iterazione.
<h2>"unmodifiable">Unmodifiable Collections</h2>
Alcuni metodi di questa interfaccia sono considerati "distruttivi" e sono chiamati metodi "mutator" in quanto modificano il gruppo di oggetti contenuti nella raccolta su cui operano. Possono essere specificati per generare UnsupportedOperationException
un'eccezione se questa implementazione della raccolta non supporta l'operazione. Tali metodi devono (ma non devono) generare un'eccezione UnsupportedOperationException
se la chiamata non avrebbe alcun effetto sulla raccolta. Si consideri, ad esempio, una raccolta che non supporta l'operazione #add add
. Cosa accade se il #addAll addAll
metodo viene richiamato su questa raccolta, con una raccolta vuota come argomento? L'aggiunta di zero elementi non ha alcun effetto, pertanto è consentito per questa raccolta semplicemente fare nulla e non generare un'eccezione. Tuttavia, è consigliabile che tali casi generino un'eccezione in modo incondizionato, poiché la generazione solo in determinati casi può causare errori di programmazione.
Una raccolta non modificabile è una raccolta, tutti i cui metodi mutatori (come definito in precedenza) vengono specificati per generare UnsupportedOperationException
. Tale raccolta non può quindi essere modificata chiamando metodi su di esso. Affinché una raccolta non sia modificabile correttamente, tutte le raccolte di viste derivate da esso devono essere modificabili. Ad esempio, se un elenco non è modificabile, anche l'elenco restituito da List#subList List.subList
non è modificabile.
Una raccolta non modificabile non è necessariamente immutabile. Se gli elementi contenuti sono modificabili, l'intera raccolta è chiaramente modificabile, anche se potrebbe non essere modificabile. Si considerino, ad esempio, due elenchi non modificabili contenenti elementi modificabili. Il risultato della chiamata list1.equals(list2)
potrebbe essere diverso da una chiamata alla successiva se gli elementi sono stati mutati, anche se entrambi gli elenchi non sono modificabili. Tuttavia, se una raccolta non modificabile contiene tutti gli elementi non modificabili, può essere considerata non modificabile in modo efficace.
<h2>"unmodview">Unmodifiable View Collections</h2>
Un insieme di viste non modificabile è una raccolta non modificabile e che è anche una visualizzazione in una raccolta di backup. I metodi mutatori generano UnsupportedOperationException
, come descritto in precedenza, durante la lettura e l'esecuzione di query i metodi vengono delegati alla raccolta di backup. L'effetto consiste nel fornire l'accesso in sola lettura alla raccolta di backup. Ciò è utile per un componente per fornire agli utenti l'accesso in lettura a una raccolta interna, impedendo loro di modificare tali raccolte in modo imprevisto. Esempi di raccolte di viste non modificabili sono quelle restituite dai Collections#unmodifiableCollection Collections.unmodifiableCollection
metodi correlati , Collections#unmodifiableList Collections.unmodifiableList
e .
Si noti che le modifiche apportate alla raccolta di backup potrebbero essere ancora possibili e, se si verificano, sono visibili tramite la visualizzazione non modificabile. Pertanto, una raccolta di viste non modificabile non è necessariamente immutabile. Tuttavia, se la raccolta di backup di una visualizzazione non modificabile è effettivamente immutabile o se l'unico riferimento all'insieme di backup è tramite una visualizzazione non modificabile, la vista può essere considerata effettivamente immutabile.
<h2>"serializable">Serializability of Collections</h2>
La serializzabilità delle raccolte è facoltativa. Di conseguenza, nessuna delle interfacce delle raccolte viene dichiarata per implementare l'interfaccia java.io.Serializable
. Tuttavia, la serializzabilità viene considerata generalmente utile, quindi la maggior parte delle implementazioni della raccolta è serializzabile.
Le implementazioni della raccolta che sono classi pubbliche (ad esempio ArrayList
o HashMap
) vengono dichiarate per implementare l'interfaccia Serializable
se sono effettivamente serializzabili. Alcune implementazioni di raccolte non sono classi pubbliche, ad esempio le raccolte non modificabili. In questi casi, la serializzabilità di tali raccolte è descritta nella specifica del metodo che li crea o in un'altra posizione appropriata. Nei casi in cui non è specificata la serializzabilità di una raccolta, non esiste alcuna garanzia sulla serializzabilità di tali raccolte. In particolare, molte raccolte di viste non sono serializzabili.
Un'implementazione della raccolta che implementa l'interfaccia Serializable
non può essere garantita come serializzabile. Il motivo è che in generale le raccolte contengono elementi di altri tipi e non è possibile determinare in modo statico se le istanze di un tipo di elemento sono effettivamente serializzabili. Si consideri, ad esempio, un oggetto serializzabile Collection<E>
, in cui E
non implementa l'interfaccia Serializable
. La raccolta può essere serializzabile, se contiene solo elementi di un sottotipo serializzabile di E
o se è vuoto. Le raccolte vengono quindi considerate serializzabili in modo condizionale, poiché la serializzabilità della raccolta nel suo complesso dipende dal fatto che la raccolta stessa sia serializzabile e sul fatto che tutti gli elementi contenuti siano serializzabili.
Si verifica un caso aggiuntivo con le istanze di SortedSet
e SortedMap
. Queste raccolte possono essere create con un Comparator
oggetto che impone un ordinamento per gli elementi impostati o le chiavi della mappa. Una raccolta di questo tipo è serializzabile solo se l'oggetto fornito Comparator
è serializzabile.
Questa interfaccia è un membro di Java Collections Framework.
Aggiunta nella versione 1.2.
Documentazione java per java.util.Collection
.
Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.
Proprietà
Handle |
Ottiene il valore JNI dell'oggetto Android sottostante. (Ereditato da IJavaObject) |
IsEmpty |
Restituisce se l'oggetto |
JniIdentityHashCode |
Restituisce il valore di |
JniManagedPeerState |
Stato del peer gestito. (Ereditato da IJavaPeerable) |
JniPeerMembers |
Supporto per l'accesso ai membri e la chiamata. (Ereditato da IJavaPeerable) |
PeerReference |
Restituisce un JniObjectReference oggetto dell'istanza dell'oggetto Java di cui è stato eseguito il wrapping. (Ereditato da IJavaPeerable) |
Metodi
Add(Object) |
Assicura che questa raccolta contenga l'elemento specificato (operazione facoltativa). |
AddAll(ICollection) |
Aggiunge tutti gli elementi della raccolta specificata a questa raccolta (operazione facoltativa). |
Clear() |
Rimuove tutti gli elementi da questa raccolta (operazione facoltativa). |
Contains(Object) |
Restituisce |
ContainsAll(ICollection) |
Restituisce |
Disposed() |
Chiamato quando l'istanza è stata eliminata. (Ereditato da IJavaPeerable) |
DisposeUnlessReferenced() |
Se non sono presenti riferimenti in sospeso a questa istanza, chiama |
Equals(Object) |
Confronta l'oggetto specificato con questa raccolta per verificare l'uguaglianza. |
Finalized() |
Chiamato quando l'istanza è stata finalizzata. (Ereditato da IJavaPeerable) |
ForEach(IConsumer) |
Esegue l'azione specificata per ogni elemento di |
GetHashCode() |
Restituisce il valore del codice hash per questa raccolta. |
Iterator() |
Restituisce un iteratore sugli elementi di questa raccolta. |
Remove(Object) |
Rimuove una singola istanza dell'elemento specificato da questa raccolta, se presente (operazione facoltativa). |
RemoveAll(ICollection) |
Rimuove tutti gli elementi di questa raccolta contenuti anche nella raccolta specificata (operazione facoltativa). |
RemoveIf(IPredicate) |
Rimuove tutti gli elementi di questa raccolta che soddisfano il predicato specificato. |
RetainAll(ICollection) |
Mantiene solo gli elementi di questa raccolta contenuti nella raccolta specificata (operazione facoltativa). |
SetJniIdentityHashCode(Int32) |
Impostare il valore restituito da |
SetJniManagedPeerState(JniManagedPeerStates) |
Interfaccia radice nella gerarchia di raccolta. (Ereditato da IJavaPeerable) |
SetPeerReference(JniObjectReference) |
Impostare il valore restituito da |
Size() |
Restituisce il numero di elementi in questa raccolta. |
Spliterator() |
Crea un |
ToArray() |
Restituisce una matrice contenente tutti gli elementi dell'insieme. |
ToArray(IIntFunction) |
Restituisce una matrice contenente tutti gli elementi di questa raccolta, utilizzando la funzione fornita |
ToArray(Object[]) |
Restituisce una matrice contenente tutti gli elementi dell'insieme; Il tipo di runtime della matrice restituita è quello della matrice specificata. |
UnregisterFromRuntime() |
Annullare la registrazione di questa istanza in modo che il runtime non lo restituisca dalle chiamate future Java.Interop.JniRuntime+JniValueManager.PeekValue . (Ereditato da IJavaPeerable) |
Implementazioni dell'interfaccia esplicita
IIterable.Spliterator() |
Crea un |
Metodi di estensione
JavaCast<TResult>(IJavaObject) |
Esegue una conversione del tipo di tipo controllato dal runtime Android. |
JavaCast<TResult>(IJavaObject) |
Interfaccia radice nella gerarchia di raccolta. |
GetJniTypeName(IJavaPeerable) |
Interfaccia radice nella gerarchia di raccolta. |
ToEnumerable(IIterable) |
Interfaccia radice nella gerarchia di raccolta. |
ToEnumerable<T>(IIterable) |
Interfaccia radice nella gerarchia di raccolta. |