HashMap Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Hashtabellenbasierte Implementierung der Map
Schnittstelle.
[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
- Vererbung
- Abgeleitet
- Attribute
- Implementiert
Hinweise
Hashtabellenbasierte Implementierung der Map
Schnittstelle. Diese Implementierung stellt alle optionalen Zuordnungsvorgänge bereit und erlaubt null
Werte und den null
Schlüssel. (Die HashMap
Klasse ist ungefähr gleichbedeutend mit Hashtable
der Ausnahme, dass sie nicht synchronisiert ist und Nullwerte zulässt.) Diese Klasse garantiert nicht die Reihenfolge der Karte; Insbesondere garantiert sie nicht, dass die Bestellung im Laufe der Zeit konstant bleibt.
Diese Implementierung bietet eine konstante Leistung für die grundlegenden Vorgänge (get
und put
), vorausgesetzt, die Hashfunktion verteilt die Elemente ordnungsgemäß zwischen den Buckets. Iteration über Sammlungsansichten erfordert Zeit proportional zur "Kapazität" der HashMap
Instanz (die Anzahl der Buckets) sowie deren Größe (die Anzahl der Schlüsselwertzuordnungen). Daher ist es sehr wichtig, die anfängliche Kapazität nicht zu hoch (oder den Lastfaktor zu niedrig) festzulegen, wenn die Iterationsleistung wichtig ist.
Eine Instanz von HashMap
zwei Parametern, die sich auf die Leistung auswirken: anfängliche Kapazität und Auslastungsfaktor. Die Kapazität ist die Anzahl der Buckets in der Hashtabelle, und die anfängliche Kapazität ist einfach die Kapazität zum Zeitpunkt der Erstellung der Hashtabelle. Der Ladefaktor ist ein Maß dafür, wie voll die Hashtabelle abgerufen werden darf, bevor die Kapazität automatisch erhöht wird. Wenn die Anzahl der Einträge in der Hashtabelle das Produkt des Ladefaktors und der aktuellen Kapazität überschreitet, wird die Hashtabelle erneut aktualisiert (d. h. interne Datenstrukturen werden neu erstellt), sodass die Hashtabelle ungefähr doppelt so viele Buckets aufweist.
Im Allgemeinen bietet der Standardlastfaktor (.75) einen guten Kompromiss zwischen Zeit und Raumkosten. Höhere Werte verringern den Platzaufwand, erhöhen aber die Nachschlagekosten (in den meisten Vorgängen der HashMap
Klasse, einschließlich get
und put
). Die erwartete Anzahl von Einträgen in der Karte und deren Lastfaktor sollten beim Festlegen der Anfangskapazität berücksichtigt werden, um die Anzahl der Rehashvorgänge zu minimieren. Wenn die Anfängliche Kapazität größer als die maximale Anzahl von Einträgen ist, die durch den Ladefaktor geteilt werden, treten niemals Rehashvorgänge auf.
Wenn viele Zuordnungen in einer HashMap
Instanz gespeichert werden sollen, kann die Erstellung mit einer ausreichend großen Kapazität die Speicherung der Zuordnungen effizienter ermöglichen, als die automatische Aktualisierung nach Bedarf durchführen zu lassen, um die Tabelle zu vergrößern. Beachten Sie, dass die Verwendung vieler Schlüssel mit demselben hashCode()
eine sichere Möglichkeit ist, die Leistung einer beliebigen Hashtabelle zu verlangsamen. Um die Auswirkungen zu verbessern, kann diese Klasse bei Schlüsseln Comparable
die Vergleichsreihenfolge zwischen Schlüsseln verwenden, um Verbindungen zu unterbrechen.
<strong>Note that this implementation is not synchronized.</strong> Wenn mehrere Threads gleichzeitig auf eine Hashzuordnung zugreifen und mindestens einer der Threads die Zuordnung strukturell ändert, muss sie extern synchronisiert werden. (Eine strukturelle Änderung ist jeder Vorgang, der eine oder mehrere Zuordnungen hinzufügt oder löscht; lediglich das Ändern des Werts, der einem Schlüssel zugeordnet ist, der bereits enthält, ist keine strukturelle Änderung.) Dies wird in der Regel durch Synchronisieren eines Objekts erreicht, das die Karte natürlich kapselt.
Wenn kein solches Objekt vorhanden ist, sollte die Zuordnung mit der Collections#synchronizedMap Collections.synchronizedMap
Methode "umbrochen" werden. Dies geschieht am besten zur Erstellungszeit, um versehentlichen nicht synchronisierten Zugriff auf die Karte zu verhindern:
Map m = Collections.synchronizedMap(new HashMap(...));
Die iteratoren, die von allen "Sammlungsansichtsmethoden" dieser Klasse zurückgegeben werden, sind fail-fast: Wenn die Karte nach dem Erstellen des Iterators strukturell geändert wird, außer über die eigene remove
Methode des Iterators, löst der Iterator einen ConcurrentModificationException
. Daher schlägt der Iterator angesichts der gleichzeitigen Änderung schnell und sauber fehl, anstatt willkürliches, nicht deterministisches Verhalten zu einem unbestimmten Zeitpunkt in der Zukunft zu riskieren.
Beachten Sie, dass das fehlschnelle Verhalten eines Iterators nicht garantiert werden kann, da es im Allgemeinen unmöglich ist, im Vorhandensein einer nicht synchronisierten gleichzeitigen Änderung hart garantiert zu werden. Fail-fast iterators throw ConcurrentModificationException
on a best-effort. Daher wäre es falsch, ein Programm zu schreiben, das von dieser Ausnahme für seine Richtigkeit abhängig ist: Das fehlerschnelle Verhalten von Iteratoren sollte nur verwendet werden, um Fehler zu erkennen.
Diese Klasse ist ein Mitglied des Java Collections Framework.
In 1.2 hinzugefügt.
Java-Dokumentation für java.util.HashMap
.
Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.
Konstruktoren
HashMap() |
Erstellt eine leere |
HashMap(IDictionary) |
Erstellt eine neue |
HashMap(Int32) |
Erstellt eine leere |
HashMap(Int32, Single) |
Erstellt eine leere |
HashMap(IntPtr, JniHandleOwnership) |
Ein Konstruktor, der beim Erstellen verwalteter Darstellungen von JNI-Objekten verwendet wird; wird von der Laufzeit aufgerufen. |
Eigenschaften
Class |
Gibt die Laufzeitklasse dieses Werts |
Handle |
Das Handle für die zugrunde liegende Android-Instanz. (Geerbt von Object) |
IsEmpty |
So wird's hinzugefügt (Geerbt von AbstractMap) |
JniIdentityHashCode |
Hashtabellenbasierte Implementierung der |
JniPeerMembers |
Hashtabellenbasierte Implementierung der |
PeerReference |
Hashtabellenbasierte Implementierung der |
ThresholdClass |
Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen. |
ThresholdType |
Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen. |
Methoden
Clear() |
So wird's hinzugefügt (Geerbt von AbstractMap) |
Clone() |
Gibt eine flache Kopie dieser |
Compute(Object, IBiFunction) |
Hashtabellenbasierte Implementierung der |
ComputeIfAbsent(Object, IFunction) |
Hashtabellenbasierte Implementierung der |
ComputeIfPresent(Object, IBiFunction) |
Hashtabellenbasierte Implementierung der |
ContainsKey(Object) |
So wird's hinzugefügt (Geerbt von AbstractMap) |
ContainsValue(Object) |
So wird's hinzugefügt (Geerbt von AbstractMap) |
Dispose() |
Hashtabellenbasierte Implementierung der |
Dispose(Boolean) |
Hashtabellenbasierte Implementierung der |
EntrySet() |
Gibt eine |
Equals(Object) |
Gibt an, ob ein anderes Objekt "gleich" diesem Objekt ist. (Geerbt von Object) |
ForEach(IBiConsumer) |
Hashtabellenbasierte Implementierung der |
Get(Object) |
So wird's hinzugefügt (Geerbt von AbstractMap) |
GetHashCode() |
Gibt einen Hashcodewert für das Objekt zurück. (Geerbt von Object) |
GetOrDefault(Object, Object) |
Hashtabellenbasierte Implementierung der |
JavaFinalize() |
Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection bestimmt, dass keine weiteren Verweise auf das Objekt vorhanden sind. (Geerbt von Object) |
KeySet() |
So wird's hinzugefügt (Geerbt von AbstractMap) |
Merge(Object, Object, IBiFunction) |
Hashtabellenbasierte Implementierung der |
Notify() |
Aktiviert einen einzelnen Thread, der auf dem Monitor dieses Objekts wartet. (Geerbt von Object) |
NotifyAll() |
Aktiviert alle Threads, die auf dem Monitor dieses Objekts warten. (Geerbt von Object) |
Put(Object, Object) |
So wird's hinzugefügt (Geerbt von AbstractMap) |
PutAll(IDictionary) |
So wird's hinzugefügt (Geerbt von AbstractMap) |
PutIfAbsent(Object, Object) |
Hashtabellenbasierte Implementierung der |
Remove(Object) |
So wird's hinzugefügt (Geerbt von AbstractMap) |
Remove(Object, Object) |
Entfernt die Zuordnung für den angegebenen Schlüssel aus dieser Karte, falls vorhanden. |
Replace(Object, Object) |
Hashtabellenbasierte Implementierung der |
Replace(Object, Object, Object) |
Hashtabellenbasierte Implementierung der |
ReplaceAll(IBiFunction) |
Hashtabellenbasierte Implementierung der |
SetHandle(IntPtr, JniHandleOwnership) |
Legt die Handle-Eigenschaft fest. (Geerbt von Object) |
Size() |
So wird's hinzugefügt (Geerbt von AbstractMap) |
ToArray<T>() |
Hashtabellenbasierte Implementierung der |
ToString() |
Gibt eine Zeichenfolgendarstellung des Objekts zurück. (Geerbt von Object) |
UnregisterFromRuntime() |
Hashtabellenbasierte Implementierung der |
Values() |
So wird's hinzugefügt (Geerbt von AbstractMap) |
Wait() |
Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch em benachrichtigt/em> oder <em>unterbrochen</em>.<>< (Geerbt von Object) |
Wait(Int64) |
Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
Wait(Int64, Int32) |
Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
Explizite Schnittstellenimplementierungen
IJavaPeerable.Disposed() |
Hashtabellenbasierte Implementierung der |
IJavaPeerable.DisposeUnlessReferenced() |
Hashtabellenbasierte Implementierung der |
IJavaPeerable.Finalized() |
Hashtabellenbasierte Implementierung der |
IJavaPeerable.JniManagedPeerState |
Hashtabellenbasierte Implementierung der |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Hashtabellenbasierte Implementierung der |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Hashtabellenbasierte Implementierung der |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Hashtabellenbasierte Implementierung der |
Erweiterungsmethoden
JavaCast<TResult>(IJavaObject) |
Führt eine android-laufzeitgecheckte Typkonvertierung aus. |
JavaCast<TResult>(IJavaObject) |
Hashtabellenbasierte Implementierung der |
GetJniTypeName(IJavaPeerable) |
Hashtabellenbasierte Implementierung der |