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 su 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 su tabella hash dell'interfaccia Map
. Questa implementazione fornisce tutte le operazioni di mapping facoltative e consente null
i valori e la null
chiave. La HashMap
classe è approssimativamente equivalente a Hashtable
, ad eccezione del fatto che non è sincronizzata e consente i valori Null. Questa classe non garantisce l'ordine della mappa; in particolare, non garantisce che l'ordine rimarrà costante nel tempo.
Questa implementazione offre prestazioni in tempo costante per le operazioni di base (get
e put
), presupponendo che la funzione hash disperdere correttamente gli elementi tra i bucket. L'iterazione sulle visualizzazioni 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 HashMap
ha due parametri che influiscono sulle prestazioni: capacità iniziale e fattore di 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 recupero della tabella hash completa prima dell'aumento automatico della capacità. Quando il numero di voci nella tabella hash supera il prodotto del fattore di carico e la capacità corrente, la tabella hash viene ricreata ( ovvero le strutture di dati interne vengono ricompilate ) in modo che la tabella hash abbia circa il doppio del 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 (riflesso nella maggior parte delle operazioni della HashMap
classe, inclusi 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 di rehash. Se la capacità iniziale è maggiore del numero massimo di voci divise per il fattore di carico, non verrà mai eseguita alcuna operazione di rehash.
Se molti mapping devono essere archiviati in un'istanza HashMap
di , la creazione con una capacità sufficientemente grande consentirà di archiviare i mapping in modo più efficiente rispetto a consentire l'esecuzione del rihashing 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 i legami.
<si>noti che questa implementazione non è sincronizzata.</strong> Se più thread accedono contemporaneamente a una mappa hash 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 HashMap(...));
Gli iteratori 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 che tramite il metodo dell'iteratore remove
, 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: il comportamento rapido degli iteratori deve essere usato solo per rilevare i bug.
Questa classe è un membro di Java Collections Framework.
Aggiunta nella versione 1.2.
Documentazione java per java.util.HashMap
.
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.
Costruttori
HashMap() |
Costruisce un oggetto vuoto |
HashMap(IDictionary) |
Costruisce un nuovo |
HashMap(Int32) |
Costruisce un oggetto vuoto |
HashMap(Int32, Single) |
Costruisce un oggetto 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 per l'istanza di Android sottostante. (Ereditato da Object) |
IsEmpty |
Da aggiungere (Ereditato da AbstractMap) |
JniIdentityHashCode |
Implementazione basata su tabella hash dell'interfaccia |
JniPeerMembers |
Implementazione basata su tabella hash dell'interfaccia |
PeerReference |
Implementazione basata su 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 su tabella hash dell'interfaccia |
ComputeIfAbsent(Object, IFunction) |
Implementazione basata su tabella hash dell'interfaccia |
ComputeIfPresent(Object, IBiFunction) |
Implementazione basata su tabella hash dell'interfaccia |
ContainsKey(Object) |
Da aggiungere (Ereditato da AbstractMap) |
ContainsValue(Object) |
Da aggiungere (Ereditato da AbstractMap) |
Dispose() |
Implementazione basata su tabella hash dell'interfaccia |
Dispose(Boolean) |
Implementazione basata su tabella hash dell'interfaccia |
EntrySet() |
Restituisce una |
Equals(Object) |
Indica se un altro oggetto è "uguale a" questo. (Ereditato da Object) |
ForEach(IBiConsumer) |
Implementazione basata su 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 su tabella hash dell'interfaccia |
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) |
Merge(Object, Object, IBiFunction) |
Implementazione basata su tabella hash dell'interfaccia |
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) |
PutIfAbsent(Object, Object) |
Implementazione basata su 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 su tabella hash dell'interfaccia |
Replace(Object, Object, Object) |
Implementazione basata su tabella hash dell'interfaccia |
ReplaceAll(IBiFunction) |
Implementazione basata su tabella hash dell'interfaccia |
SetHandle(IntPtr, JniHandleOwnership) |
Imposta la proprietà Handle. (Ereditato da Object) |
Size() |
Da aggiungere (Ereditato da AbstractMap) |
ToArray<T>() |
Implementazione basata su tabella hash dell'interfaccia |
ToString() |
Restituisce una rappresentazione di stringa dell'oggetto. (Ereditato da Object) |
UnregisterFromRuntime() |
Implementazione basata su tabella hash dell'interfaccia |
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) |
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, 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) |
Implementazioni dell'interfaccia esplicita
IJavaPeerable.Disposed() |
Implementazione basata su tabella hash dell'interfaccia |
IJavaPeerable.DisposeUnlessReferenced() |
Implementazione basata su tabella hash dell'interfaccia |
IJavaPeerable.Finalized() |
Implementazione basata su tabella hash dell'interfaccia |
IJavaPeerable.JniManagedPeerState |
Implementazione basata su tabella hash dell'interfaccia |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Implementazione basata su tabella hash dell'interfaccia |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Implementazione basata su tabella hash dell'interfaccia |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Implementazione basata su tabella hash dell'interfaccia |
Metodi di estensione
JavaCast<TResult>(IJavaObject) |
Esegue una conversione del tipo di tipo controllato dal runtime Android. |
JavaCast<TResult>(IJavaObject) |
Implementazione basata su tabella hash dell'interfaccia |
GetJniTypeName(IJavaPeerable) |
Implementazione basata su tabella hash dell'interfaccia |