IdentityHashMap Classe

Definizione

Questa classe implementa l'interfaccia con una tabella hash, usando l'uguaglianza dei riferimenti al posto dell'uguaglianza di oggetti durante il Map confronto di chiavi (e valori).

[Android.Runtime.Register("java/util/IdentityHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class IdentityHashMap : Java.Util.AbstractMap, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ISerializable, Java.Lang.ICloneable
[<Android.Runtime.Register("java/util/IdentityHashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type IdentityHashMap = class
    inherit AbstractMap
    interface ISerializable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
    interface ICloneable
    interface IMap
Ereditarietà
IdentityHashMap
Attributi
Implementazioni

Commenti

Questa classe implementa l'interfaccia con una tabella hash, usando l'uguaglianza dei riferimenti al posto dell'uguaglianza di oggetti durante il Map confronto di chiavi (e valori). In altre parole, in un IdentityHashMap, due chiavi k1 e k2 vengono considerate uguali se e solo se (k1==k2). (Nelle implementazioni normali Map (ad esempio HashMap) due chiavi k1 e k2 vengono considerate uguali se e solo se (k1==null ? k2==null : k1.equals(k2)).)

<b>Questa classe non è un'implementazione generica Map . Sebbene questa classe implementi l'interfaccia Map , viola Map's intenzionalmente il contratto generale, che impone l'uso del metodo durante il equals confronto degli oggetti. Questa classe è progettata per l'uso solo nei rari casi in cui è necessaria la semantica di uguaglianza dei riferimenti.</b>

Le raccolte di viste di questa mappa hanno anche una semantica di uguaglianza dei riferimenti per i relativi elementi. Per altre informazioni, vedere i keySet() keySetmetodi , values() valuese entrySet() entrySet .

Un uso tipico di questa classe è rappresentato da trasformazioni dell'oggetto grafico con mantenimento della topologia, ad esempio la serializzazione o la copia approfondita. Per eseguire tale trasformazione, un programma deve mantenere una "tabella nodo" che tiene traccia di tutti i riferimenti all'oggetto che sono già stati elaborati. La tabella dei nodi non deve corrispondere a oggetti distinti anche se sono uguali. Un altro uso tipico di questa classe consiste nel gestire gli oggetti proxy. Ad esempio, una funzionalità di debug potrebbe voler mantenere un oggetto proxy per ogni oggetto del programma sottoposto a debug.

Questa classe fornisce tutte le operazioni di mapping facoltative e consente null i valori e la null chiave. Questa classe non garantisce l'ordine della mappa; in particolare, non garantisce che l'ordine rimarrà costante nel tempo.

Questa classe fornisce prestazioni in tempo costante per le operazioni di base (get e put), presupponendo che la funzione hash delle identità di sistema (System#identityHashCode(Object)) disperde correttamente gli elementi tra i bucket.

Questa classe ha un parametro di ottimizzazione (che influisce sulle prestazioni ma non sulla semantica): dimensioni massime previste. Questo parametro è il numero massimo di mapping chiave-valore che la mappa deve contenere. Internamente, questo parametro viene usato per determinare il numero di bucket che inizialmente comprendono la tabella hash. La relazione precisa tra le dimensioni massime previste e il numero di bucket non è specificata.

Se le dimensioni della mappa (il numero di mapping chiave-valore) superano sufficientemente le dimensioni massime previste, il numero di bucket viene aumentato. L'aumento del numero di bucket ("rehashing") può essere piuttosto costoso, quindi è consigliabile creare mappe hash delle identità con dimensioni massime previste sufficientemente elevate. D'altra parte, l'iterazione sulle visualizzazioni della raccolta richiede tempo proporzionale al numero di bucket nella tabella hash, quindi è consigliabile non impostare le dimensioni massime previste troppo elevate se si è particolarmente interessati alle prestazioni di iterazione o all'utilizzo della memoria.

<si>noti che questa implementazione non è sincronizzata.</strong> Se più thread accedono contemporaneamente a una mappa hash delle identità e almeno uno dei thread modifica la mappa in modo strutturale, deve essere sincronizzata esternamente. Una modifica strutturale è un'operazione che aggiunge o elimina uno o più mapping. È sufficiente modificare il valore associato a una chiave che un'istanza già contiene non è una modifica strutturale. Questa operazione viene in genere eseguita sincronizzando su un oggetto che incapsula naturalmente la mappa.

Se non esiste alcun oggetto di questo tipo, la mappa deve essere "sottoposta a wrapping" usando il Collections#synchronizedMap Collections.synchronizedMap metodo . Questa operazione viene eseguita al momento della creazione per impedire l'accesso accidentale non sincronizzato alla mappa:

Map m = Collections.synchronizedMap(new IdentityHashMap(...));

Gli iteratori restituiti dal iterator metodo delle raccolte restituiti da tutti i "metodi di visualizzazione raccolta" di questa classe sono rapidi: se la mappa viene modificata strutturalmente in qualsiasi momento dopo la creazione dell'iteratore, in qualsiasi modo tranne tramite il metodo del proprio remove iteratore, l'iteratore genererà un'eccezione ConcurrentModificationException. Di conseguenza, in presenza di modifiche simultanee, l'iteratore ha esito negativo rapidamente e pulito, anziché rischiare un comportamento arbitrario non deterministico in un momento indeterminato in futuro.

Si noti che il comportamento rapido di errore di un iteratore non può essere garantito così com'è, in generale, impossibile rendere eventuali garanzie difficili in presenza di modifiche simultanee non sincronizzate. Gli iteratori veloci a errori generano ConcurrentModificationException un'operazione ottimale. Pertanto, sarebbe sbagliato scrivere un programma che dipende da questa eccezione per la correttezza: gli iteratori con errori devono essere usati solo per rilevare i bug.

Questa classe è un membro di Java Collections Framework.

Aggiunta nella versione 1.4.

per java.util.IdentityHashMap.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dalla e usati in base ai termini descritti in Creative License 2.5 Attribution License.

Costruttori

Nome Descrizione
IdentityHashMap()

Costruisce una nuova mappa hash identity vuota con una dimensione massima predefinita prevista (21).

IdentityHashMap(IDictionary)

Costruisce una nuova mappa hash identity contenente i mapping di chiavi-valore nella mappa specificata.

IdentityHashMap(Int32)

Costruisce una nuova mappa vuota con le dimensioni massime previste specificate.

IdentityHashMap(IntPtr, JniHandleOwnership)

Costruttore usato durante la creazione di rappresentazioni gestite di oggetti JNI; chiamato dal runtime.

Proprietà

Nome Descrizione
Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
Handle

Handle per l'istanza di Android sottostante.

(Ereditato da Object)
IsEmpty

Da aggiungere

(Ereditato da AbstractMap)
JniIdentityHashCode

Ottiene il codice hash di identità assegnato a questo Java peer dal runtime di interoperabilità.

(Ereditato da Object)
JniPeerMembers

Questa classe implementa l'interfaccia con una tabella hash, usando l'uguaglianza dei riferimenti al posto dell'uguaglianza di oggetti durante il Map confronto di chiavi (e valori).

PeerReference

Ottiene il riferimento all'oggetto JNI per questo peer Java.

(Ereditato da Object)
ThresholdClass

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

ThresholdType

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

Metodi

Nome Descrizione
Clear()

Da aggiungere

(Ereditato da AbstractMap)
Clone()

Restituisce una copia superficiale di questa mappa hash identity: le chiavi e i valori stessi non vengono clonati.

ContainsKey(Object)

Da aggiungere

(Ereditato da AbstractMap)
ContainsValue(Object)

Da aggiungere

(Ereditato da AbstractMap)
Dispose()

Rilascia le risorse contenute in questo peer Java.

(Ereditato da Object)
Dispose(Boolean)

Rilascia le risorse contenute in questo peer Java.

(Ereditato da Object)
EntrySet()

Restituisce una Set visualizzazione dei mapping contenuti in questa mappa.

Equals(Object)

Indica se un altro oggetto è "uguale a" questo.

(Ereditato da Object)
ForEach(IBiConsumer)

Questa classe implementa l'interfaccia con una tabella hash, usando l'uguaglianza dei riferimenti al posto dell'uguaglianza di oggetti durante il Map confronto di chiavi (e valori).

Get(Object)

Da aggiungere

(Ereditato da AbstractMap)
GetHashCode()

Restituisce un valore di codice hash per l'oggetto .

(Ereditato da Object)
JavaFinalize()

Chiamato dal Garbage Collector su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto .

(Ereditato da Object)
KeySet()

Da aggiungere

(Ereditato da AbstractMap)
Notify()

Riattiva un singolo thread in attesa del monitor dell'oggetto.

(Ereditato da Object)
NotifyAll()

Riattiva tutti i thread in attesa del monitor dell'oggetto.

(Ereditato da Object)
Put(Object, Object)

Da aggiungere

(Ereditato da AbstractMap)
PutAll(IDictionary)

Da aggiungere

(Ereditato da AbstractMap)
Remove(Object, Object)

Questa classe implementa l'interfaccia con una tabella hash, usando l'uguaglianza dei riferimenti al posto dell'uguaglianza di oggetti durante il Map confronto di chiavi (e valori).

Remove(Object)

Da aggiungere

(Ereditato da AbstractMap)
Replace(Object, Object, Object)

Da aggiungere

ReplaceAll(IBiFunction)

Questa classe implementa l'interfaccia con una tabella hash, usando l'uguaglianza dei riferimenti al posto dell'uguaglianza di oggetti durante il Map confronto di chiavi (e valori).

SetHandle(IntPtr, JniHandleOwnership)

Imposta la proprietà Handle.

(Ereditato da Object)
Size()

Da aggiungere

(Ereditato da AbstractMap)
ToArray<T>()

Crea una matrice gestita da questo wrapper di matrice Java.

(Ereditato da Object)
ToString()

Restituisce una rappresentazione di stringa dell'oggetto .

(Ereditato da Object)
UnregisterFromRuntime()

Annulla la registrazione di questo Java peer dal runtime di interoperabilità.

(Ereditato da Object)
Values()

Da aggiungere

(Ereditato da AbstractMap)
Wait()

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo <>una notifica</em> o <em>interrotto</em>.

(Ereditato da Object)
Wait(Int64, Int32)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo<> una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale.

(Ereditato da Object)
Wait(Int64)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo<> una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

Nome Descrizione
IJavaPeerable.Disposed()

Notifica al runtime di interoperabilità che il peer gestito è stato eliminato.

(Ereditato da Object)
IJavaPeerable.DisposeUnlessReferenced()

Rilascia questo Java peer a meno che non venga conservato da un altro riferimento gestito.

(Ereditato da Object)
IJavaPeerable.Finalized()

Notifica al runtime di interoperabilità che il peer gestito è stato finalizzato.

(Ereditato da Object)
IJavaPeerable.JniManagedPeerState

Ottiene lo stato che descrive la relazione tra questo peer gestito e il relativo riferimento JNI.

(Ereditato da Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Imposta il codice hash dell'identità di interoperabilità per questo Java peer.

(Ereditato da Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Imposta lo stato peer gestito e JNI per questo peer Java.

(Ereditato da Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Imposta il riferimento all'oggetto JNI usato da questo peer gestito.

(Ereditato da Object)

Metodi di estensione

Nome Descrizione
GetJniTypeName(IJavaPeerable)

Ottiene il nome JNI del tipo dell'istanza selfdi .

JavaAs<TResult>(IJavaPeerable)

Provare a digitare selfTResult, verificando che la coercizione sia valida sul lato Java.

JavaCast<TResult>(IJavaObject)

Esegue una conversione del tipo di tipo controllato dal runtime Android.

JavaCast<TResult>(IJavaObject)

Questa classe implementa l'interfaccia con una tabella hash, usando l'uguaglianza dei riferimenti al posto dell'uguaglianza di oggetti durante il Map confronto di chiavi (e valori).

TryJavaCast<TResult>(IJavaPeerable, TResult)

Provare a digitare selfTResult, verificando che la coercizione sia valida sul lato Java.

Si applica a