Freigeben über


HashMap Klasse

Definition

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 Hashtableder 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 Comparabledie 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 Kapazität mit der Standardkapazität (16) und dem Standardlastfaktor (0).

HashMap(IDictionary)

Erstellt eine neue HashMap Mit den gleichen Zuordnungen wie die angegebene Map.

HashMap(Int32)

Erstellt eine leere HashMap Mit der angegebenen Anfangskapazität und dem Standardlastfaktor (0).

HashMap(Int32, Single)

Erstellt eine leere HashMap Mit dem angegebenen Anfangskapazitäts- und Lastfaktor.

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 Objectzurück.

(Geerbt von Object)
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 Map Schnittstelle.

(Geerbt von Object)
JniPeerMembers

Hashtabellenbasierte Implementierung der Map Schnittstelle.

PeerReference

Hashtabellenbasierte Implementierung der Map Schnittstelle.

(Geerbt von Object)
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 HashMap Instanz zurück: Die Schlüssel und Werte selbst werden nicht geklont.

Compute(Object, IBiFunction)

Hashtabellenbasierte Implementierung der Map Schnittstelle.

ComputeIfAbsent(Object, IFunction)

Hashtabellenbasierte Implementierung der Map Schnittstelle.

ComputeIfPresent(Object, IBiFunction)

Hashtabellenbasierte Implementierung der Map Schnittstelle.

ContainsKey(Object)

So wird's hinzugefügt

(Geerbt von AbstractMap)
ContainsValue(Object)

So wird's hinzugefügt

(Geerbt von AbstractMap)
Dispose()

Hashtabellenbasierte Implementierung der Map Schnittstelle.

(Geerbt von Object)
Dispose(Boolean)

Hashtabellenbasierte Implementierung der Map Schnittstelle.

(Geerbt von Object)
EntrySet()

Gibt eine Set Ansicht der In dieser Karte enthaltenen Zuordnungen zurück.

Equals(Object)

Gibt an, ob ein anderes Objekt "gleich" diesem Objekt ist.

(Geerbt von Object)
ForEach(IBiConsumer)

Hashtabellenbasierte Implementierung der Map Schnittstelle.

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 Map Schnittstelle.

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 Map Schnittstelle.

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 Map Schnittstelle.

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 Map Schnittstelle.

Replace(Object, Object, Object)

Hashtabellenbasierte Implementierung der Map Schnittstelle.

ReplaceAll(IBiFunction)

Hashtabellenbasierte Implementierung der Map Schnittstelle.

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 Map Schnittstelle.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolgendarstellung des Objekts zurück.

(Geerbt von Object)
UnregisterFromRuntime()

Hashtabellenbasierte Implementierung der Map Schnittstelle.

(Geerbt von Object)
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 Map Schnittstelle.

(Geerbt von Object)
IJavaPeerable.DisposeUnlessReferenced()

Hashtabellenbasierte Implementierung der Map Schnittstelle.

(Geerbt von Object)
IJavaPeerable.Finalized()

Hashtabellenbasierte Implementierung der Map Schnittstelle.

(Geerbt von Object)
IJavaPeerable.JniManagedPeerState

Hashtabellenbasierte Implementierung der Map Schnittstelle.

(Geerbt von Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Hashtabellenbasierte Implementierung der Map Schnittstelle.

(Geerbt von Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Hashtabellenbasierte Implementierung der Map Schnittstelle.

(Geerbt von Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Hashtabellenbasierte Implementierung der Map Schnittstelle.

(Geerbt von Object)

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

Führt eine android-laufzeitgecheckte Typkonvertierung aus.

JavaCast<TResult>(IJavaObject)

Hashtabellenbasierte Implementierung der Map Schnittstelle.

GetJniTypeName(IJavaPeerable)

Hashtabellenbasierte Implementierung der Map Schnittstelle.

Gilt für: