HashMap Classe
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.
Implementazione basata sulla tabella hash dell'interfaccia Map
.
[Android.Runtime.Register("java/util/HashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class HashMap : Java.Util.AbstractMap, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ISerializable, Java.Lang.ICloneable
[<Android.Runtime.Register("java/util/HashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type HashMap = class
inherit AbstractMap
interface ISerializable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface ICloneable
interface IMap
- Ereditarietà
- Derivato
- Attributi
- Implementazioni
Commenti
Implementazione basata sulla tabella hash dell'interfaccia Map
. Questa implementazione fornisce tutte le operazioni di mappa facoltative e consente null
valori e chiave null
. La HashMap
classe è approssimativamente equivalente a Hashtable
, ad eccezione del fatto che non è asincronizzata e consente nulls. Questa classe non garantisce l'ordine della mappa; in particolare, non garantisce che l'ordine rimanga costante nel tempo.
Questa implementazione fornisce prestazioni in tempo costante per le operazioni di base (get
e put
), presupponendo che la funzione hash disperi gli elementi correttamente tra i bucket. L'iterazione sulle visualizzazioni della raccolta richiede tempo proporzionale alla "capacità" dell'istanza HashMap
(il numero di bucket) più le dimensioni (il numero di mapping chiave-valore). Pertanto, è molto importante non impostare la capacità iniziale troppo elevata (o il fattore di carico troppo basso) se le prestazioni di iterazione sono importanti.
Un'istanza di ha due parametri che influiscono sulle prestazioni: capacità iniziale e fattore diHashMap
carico. La capacità è il numero di bucket nella tabella hash e la capacità iniziale è semplicemente la capacità al momento della creazione della tabella hash. Il fattore di carico è una misura della modalità di aumento automatico della tabella hash della tabella hash. Quando il numero di voci nella tabella hash supera il prodotto del fattore di carico e la capacità corrente, la tabella hash viene ricompilata (ovvero le strutture dati interne vengono ricompilate) in modo che la tabella hash abbia circa due volte il numero di bucket.
Come regola generale, il fattore di carico predefinito (.75) offre un buon compromesso tra i costi di tempo e spazio. I valori più elevati riducono il sovraccarico dello spazio, ma aumentano il costo di ricerca (riflessa nella maggior parte delle operazioni della HashMap
classe, inclusa get
e put
). Il numero previsto di voci nella mappa e il relativo fattore di carico devono essere presi in considerazione quando si imposta la capacità iniziale, in modo da ridurre al minimo il numero di operazioni rehash. Se la capacità iniziale è maggiore del numero massimo di voci suddivise dal fattore di carico, non verranno mai eseguite operazioni rehash.
Se molti mapping devono essere archiviati in un'istanza HashMap
, la creazione con una capacità sufficientemente grande consentirà di archiviare i mapping in modo più efficiente rispetto a consentire di eseguire il ripristino automatico in base alle esigenze per aumentare la tabella. Si noti che l'uso di molte chiavi con lo stesso hashCode()
è un modo sicuro per rallentare le prestazioni di qualsiasi tabella hash. Per migliorare l'impatto, quando le chiavi sono Comparable
, questa classe può usare l'ordine di confronto tra le chiavi per interrompere le relazioni.
<Nota forte>che questa implementazione non è sincronizzata.</strong> Se più thread accedono a una mappa hash simultaneamente e almeno uno dei thread modifica la mappa in modo strutturale, deve essere sincronizzato esternamente. Una modifica strutturale è un'operazione che aggiunge o elimina uno o più mapping, modificando semplicemente 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 "wrapped" usando il Collections#synchronizedMap Collections.synchronizedMap
metodo . Questa operazione viene eseguita al momento della creazione, per evitare l'accesso accidentale non sincronizzato alla mappa:
Map m = Collections.synchronizedMap(new HashMap(...));
Gli iteratori restituiti da tutti i metodi di visualizzazione della classe sono rapidi: se la mappa viene modificata in modo strutturale in qualsiasi momento dopo la creazione dell'iteratore, in qualsiasi modo tranne tramite il metodo proprietario remove
dell'iteratore, l'iteratore genererà un ConcurrentModificationException
oggetto . Pertanto, a fronte di modifiche simultanee, l'iteratore ha esito negativo rapidamente e pulito, anziché rischiare un comportamento arbitrario e non deterministico in un momento indeterminato in futuro.
Si noti che il comportamento non riuscito di un iteratore non può essere garantito perché è, in genere, impossibile rendere eventuali garanzie difficili in presenza di modifiche simultanee non sincronizzate. Gli iteratori veloci non riescono generano ConcurrentModificationException
un'attività ottimale. Pertanto, sarebbe sbagliato scrivere un programma che dipende da questa eccezione per la sua correttezza: il comportamento non rapido degli iteratori deve essere usato solo per rilevare i bug.
Questa classe è un membro di Java Collections Framework.
Aggiunto nella versione 1.2.
Documentazione Java per java.util.HashMap
.
Le parti di questa pagina sono modifiche in base al lavoro creato e condiviso dal Android Open Source e usato in base ai termini descritti nella .
Costruttori
HashMap() |
Costruisce un vuoto |
HashMap(IDictionary) |
Costruisce un nuovo |
HashMap(Int32) |
Costruisce un vuoto |
HashMap(Int32, Single) |
Costruisce un vuoto |
HashMap(IntPtr, JniHandleOwnership) |
Costruttore usato durante la creazione di rappresentazioni gestite di oggetti JNI; chiamato dal runtime. |
Proprietà
Class |
Restituisce la classe di runtime di questo |
Handle |
Handle all'istanza di Android sottostante. (Ereditato da Object) |
IsEmpty |
Da aggiungere (Ereditato da AbstractMap) |
JniIdentityHashCode |
Implementazione basata sulla tabella hash dell'interfaccia |
JniPeerMembers |
Implementazione basata sulla tabella hash dell'interfaccia |
PeerReference |
Implementazione basata sulla tabella hash dell'interfaccia |
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
Clear() |
Da aggiungere (Ereditato da AbstractMap) |
Clone() |
Restituisce una copia superficiale di questa |
Compute(Object, IBiFunction) |
Implementazione basata sulla tabella hash dell'interfaccia |
ComputeIfAbsent(Object, IFunction) |
Implementazione basata sulla tabella hash dell'interfaccia |
ComputeIfPresent(Object, IBiFunction) |
Implementazione basata sulla tabella hash dell'interfaccia |
ContainsKey(Object) |
Da aggiungere (Ereditato da AbstractMap) |
ContainsValue(Object) |
Da aggiungere (Ereditato da AbstractMap) |
Dispose() |
Implementazione basata sulla tabella hash dell'interfaccia |
Dispose(Boolean) |
Implementazione basata sulla tabella hash dell'interfaccia |
EntrySet() |
Restituisce una |
Equals(Object) |
Indica se un altro oggetto è "uguale a" questo. (Ereditato da Object) |
ForEach(IBiConsumer) |
Implementazione basata sulla tabella hash dell'interfaccia |
Get(Object) |
Da aggiungere (Ereditato da AbstractMap) |
GetHashCode() |
Restituisce un valore del codice hash per l'oggetto. (Ereditato da Object) |
GetOrDefault(Object, Object) |
Implementazione basata sulla tabella hash dell'interfaccia |
JavaFinalize() |
Chiamato dal Garbage Collector in un oggetto quando Garbage Collection determina che non sono presenti più riferimenti all'oggetto. (Ereditato da Object) |
KeySet() |
Da aggiungere (Ereditato da AbstractMap) |
Merge(Object, Object, IBiFunction) |
Implementazione basata sulla tabella hash dell'interfaccia |
Notify() |
Riattiva un singolo thread in attesa del monitoraggio dell'oggetto. (Ereditato da Object) |
NotifyAll() |
Riattiva tutti i thread in attesa del monitoraggio dell'oggetto. (Ereditato da Object) |
Put(Object, Object) |
Da aggiungere (Ereditato da AbstractMap) |
PutAll(IDictionary) |
Da aggiungere (Ereditato da AbstractMap) |
PutIfAbsent(Object, Object) |
Implementazione basata sulla tabella hash dell'interfaccia |
Remove(Object) |
Da aggiungere (Ereditato da AbstractMap) |
Remove(Object, Object) |
Rimuove il mapping per la chiave specificata da questa mappa, se presente. |
Replace(Object, Object) |
Implementazione basata sulla tabella hash dell'interfaccia |
Replace(Object, Object, Object) |
Implementazione basata sulla tabella hash dell'interfaccia |
ReplaceAll(IBiFunction) |
Implementazione basata sulla tabella hash dell'interfaccia |
SetHandle(IntPtr, JniHandleOwnership) |
Imposta la proprietà Handle. (Ereditato da Object) |
Size() |
Da aggiungere (Ereditato da AbstractMap) |
ToArray<T>() |
Implementazione basata sulla tabella hash dell'interfaccia |
ToString() |
Restituisce una rappresentazione in formato stringa dell'oggetto. (Ereditato da Object) |
UnregisterFromRuntime() |
Implementazione basata sulla tabella hash dell'interfaccia |
Values() |
Da aggiungere (Ereditato da AbstractMap) |
Wait() |
Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere eseguendo>una notifica</em o <em interrotto</>em>>.< (Ereditato da Object) |
Wait(Int64) |
Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere <>eseguendo una notifica</em o <em interrotto/>>em>o fino a quando non è trascorsa< una determinata quantità di tempo reale. (Ereditato da Object) |
Wait(Int64, Int32) |
Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere <>eseguendo 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
IJavaPeerable.Disposed() |
Implementazione basata sulla tabella hash dell'interfaccia |
IJavaPeerable.DisposeUnlessReferenced() |
Implementazione basata sulla tabella hash dell'interfaccia |
IJavaPeerable.Finalized() |
Implementazione basata sulla tabella hash dell'interfaccia |
IJavaPeerable.JniManagedPeerState |
Implementazione basata sulla tabella hash dell'interfaccia |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Implementazione basata sulla tabella hash dell'interfaccia |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Implementazione basata sulla tabella hash dell'interfaccia |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Implementazione basata sulla tabella hash dell'interfaccia |
Metodi di estensione
JavaCast<TResult>(IJavaObject) |
Esegue una conversione dei tipi controllati dal runtime Android. |
JavaCast<TResult>(IJavaObject) |
Implementazione basata sulla tabella hash dell'interfaccia |
GetJniTypeName(IJavaPeerable) |
Implementazione basata sulla tabella hash dell'interfaccia |