Condividi tramite


ICollection Interfaccia

Definizione

Interfaccia radice nella gerarchia della 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 della 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 sottointerfacce più specifiche come Set e List. Questa interfaccia viene in genere usata per passare le raccolte e modificarle dove è desiderata la generalità massima.

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 sottointerfacce) devono fornire due costruttori "standard": un costruttore void (senza argomenti), 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 esiste alcun modo per 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 determinata operazione, deve definire il metodo corrispondente per generare UnsupportedOperationException. Tali metodi sono contrassegnati come "operazione facoltativa" nelle specifiche dei metodi 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. Più in generale, 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 può 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 modificata da un altro thread; sono incluse 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 implicare che la chiamata Collection.contains a un argomento o non Null provocherà o.equals(e) la chiamata di per qualsiasi elemento e. Le implementazioni sono libere di implementare ottimizzazioni in base alla quale viene evitata la equals chiamata, 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. 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 autoferenziale, ma la maggior parte delle implementazioni correnti non lo fa.

<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 visualizzazioni includono le raccolte wrapper restituite da metodi quali Collections#checkedCollection Collections.checkedCollection, Collections#synchronizedCollection Collections.synchronizedCollectione 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.subSeto Map#entrySet Map.entrySet. Tutte le modifiche apportate alla raccolta 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 backup saranno visibili all'iteratore durante l'iterazione.

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

Alcuni metodi di questa interfaccia sono considerati "distruttivi" e sono chiamati metodi "mutatori" in quanto modificano il gruppo di oggetti contenuti nella raccolta in 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 avrà 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 eseguire alcuna operazione 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 alcun metodo su di esso. Affinché una raccolta non sia modificabile correttamente, è necessario che anche le raccolte di visualizzazioni derivate da essa non siano 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 modificati, anche se entrambi gli elenchi non sono modificabili. Tuttavia, se una raccolta non modificabile contiene tutti gli elementi non modificabili, può essere considerato non modificabile in modo efficace.

<h2>"unmodview">Raccolte di viste< non modificabili/h2>

Una raccolta di visualizzazioni non modificabile è una raccolta che 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.unmodifiableCollectionmetodi correlati , Collections#unmodifiableList Collections.unmodifiableListe .

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 visualizzazioni non modificabile non è necessariamente modificabile. Tuttavia, se l'insieme di backup di una visualizzazione non modificabile è effettivamente non modificabile o se l'unico riferimento alla raccolta di backup è tramite una visualizzazione non modificabile, la visualizzazione può essere considerata effettivamente non modificabile.

<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à è 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 viene specificata la serializzabilità di una raccolta, non esiste alcuna garanzia sulla serializzabilità di tali raccolte. In particolare, molte raccolte di visualizzazioni non sono serializzabili.

Un'implementazione della raccolta che implementa l'interfaccia Serializable non può essere 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 serializzabile Collection<E>, in cui E non implementa l'interfaccia Serializable . L'insieme può essere serializzabile, se contiene solo elementi di un sottotipo serializzabile di Eo se è vuoto. Le raccolte vengono quindi definite 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.

Un caso aggiuntivo si verifica 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 di mapping. 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 Android e usato in base ai termini descritti in 2.5 Attribution License Creative Commons 2.5 Attribution License.

Proprietà

Handle

Ottiene il valore JNI dell'oggetto Android sottostante.

(Ereditato da IJavaObject)
IsEmpty

Restituisce se non Collection contiene elementi.

JniIdentityHashCode

Restituisce il valore di java.lang.System.identityHashCode() per l'istanza di di cui è stato eseguito il wrapping.

(Ereditato da IJavaPeerable)
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 true se l'insieme contiene l'elemento specificato.

ContainsAll(ICollection)

Restituisce true se l'insieme contiene tutti gli elementi dell'insieme specificato.

Disposed()

Chiamato quando l'istanza è stata eliminata.

(Ereditato da IJavaPeerable)
DisposeUnlessReferenced()

Se non sono presenti riferimenti in sospeso a questa istanza, chiama Dispose(); in caso contrario, non esegue alcuna operazione.

(Ereditato da IJavaPeerable)
Equals(Object)

Confronta l'oggetto specificato con questa raccolta per verificarne l'uguaglianza.

Finalized()

Chiamato quando l'istanza è stata finalizzata.

(Ereditato da IJavaPeerable)
ForEach(IConsumer)

Esegue l'azione specificata per ogni elemento di Iterable finché non vengono elaborati tutti gli elementi o l'azione genera un'eccezione.

(Ereditato da IIterable)
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 JniIdentityHashCode.

(Ereditato da IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Interfaccia radice nella gerarchia della raccolta.

(Ereditato da IJavaPeerable)
SetPeerReference(JniObjectReference)

Impostare il valore restituito da PeerReference.

(Ereditato da IJavaPeerable)
Size()

Restituisce il numero di elementi in questa raccolta.

Spliterator()

Crea un Spliterator oggetto sugli elementi descritti da questo Iterableoggetto .

(Ereditato da IIterable)
ToArray()

Restituisce una matrice contenente tutti gli elementi di questa raccolta.

ToArray(IIntFunction)

Restituisce una matrice contenente tutti gli elementi di questa raccolta, utilizzando la funzione fornita generator per allocare la matrice restituita.

ToArray(Object[])

Restituisce una matrice contenente tutti gli elementi di questa raccolta; 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 oggetto Spliterator sugli elementi di questa raccolta.

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione del tipo verificato dal runtime Android.

JavaCast<TResult>(IJavaObject)

Interfaccia radice nella gerarchia della raccolta.

GetJniTypeName(IJavaPeerable)

Interfaccia radice nella gerarchia della raccolta.

ToEnumerable(IIterable)

Interfaccia radice nella gerarchia della raccolta.

ToEnumerable<T>(IIterable)

Interfaccia radice nella gerarchia della raccolta.

Si applica a