Share via


IdentityHashMap Klasse

Definition

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

[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
Vererbung
IdentityHashMap
Attribute
Implementiert

Hinweise

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird. Mit anderen Worten, in einem IdentityHashMapwerden zwei Schlüssel k1 und k2 als gleich angesehen, wenn und nur, wenn (k1==k2). (In normalen Map Implementierungen (wie HashMap) zwei Schlüssel k1 und k2 werden als gleich betrachtet, wenn und nur, wenn (k1==null ? k2==null : k1.equals(k2)).)

<b>Diese Klasse ist keine allgemeine Map Implementierung! Diese Klasse implementiert zwar die Map -Schnittstelle, verletzt aber absichtlich den Map's allgemeinen Vertrag, der die Verwendung der equals -Methode beim Vergleichen von Objekten vorschreibt. Diese Klasse ist nur für die Verwendung in den seltenen Fällen konzipiert, in denen referenzgleiche Semantik erforderlich ist.</B>

Eine typische Verwendung dieser Klasse sind topologierhaltende Objektgraphtransformationen, z. B. Serialisierung oder deep-copy. Um eine solche Transformation auszuführen, muss ein Programm eine "Knotentabelle" verwalten, die alle bereits verarbeiteten Objektverweise nachverfolgt. Die Knotentabelle darf unterschiedliche Objekte nicht gleichsetzen, auch wenn sie zufällig gleich sind. Eine weitere typische Verwendung dieser Klasse ist die Verwaltung von Proxyobjekten. Beispielsweise kann eine Debugfunktion ein Proxyobjekt für jedes Objekt im zu debuggenden Programm verwalten.

Diese Klasse stellt alle optionalen Zuordnungsvorgänge bereit und lässt null Werte und den null Schlüssel zu. Diese Klasse gibt keine Garantien für die Reihenfolge der Karte; insbesondere garantiert sie nicht, dass die Bestellung im Laufe der Zeit konstant bleibt.

Diese Klasse bietet eine konstante Zeitleistung für die grundlegenden Vorgänge (get und put), vorausgesetzt, die Systemidentitätshashfunktion (System#identityHashCode(Object)) verteilt Elemente ordnungsgemäß auf die Buckets.

Diese Klasse verfügt über einen Optimierungsparameter (der sich auf die Leistung auswirkt, aber nicht auf die Semantik): die erwartete maximale Größe. Dieser Parameter ist die maximale Anzahl von Schlüssel-Wert-Zuordnungen, die die Zuordnung enthalten soll. Intern wird dieser Parameter verwendet, um die Anzahl der Buckets zu bestimmen, die ursprünglich die Hashtabelle enthalten. Die genaue Beziehung zwischen der erwarteten maximalen Größe und der Anzahl der Buckets ist nicht angegeben.

Wenn die Größe der Zuordnung (die Anzahl der Schlüssel-Wert-Zuordnungen) die erwartete maximale Größe ausreichend überschreitet, wird die Anzahl der Buckets erhöht. Das Erhöhen der Anzahl von Buckets ("Rehashing") kann ziemlich teuer sein, daher lohnt es sich, Identitätshashzuordnungen mit einer ausreichend großen erwarteten maximalen Größe zu erstellen. Auf der anderen Seite erfordert die Iteration über Sammlungsansichten zeit proportional zur Anzahl der Buckets in der Hashtabelle, sodass es sich lohnt, die erwartete maximale Größe nicht zu hoch festzulegen, wenn Sie sich besonders mit der Iterationsleistung oder der Speicherauslastung befassen.

<Strong>Beachten Sie, dass diese Implementierung nicht synchronisiert wird.</strong> Wenn mehrere Threads gleichzeitig auf eine Identitätshashzuordnung 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. Das bloße Ändern des Werts, der einem Schlüssel zugeordnet ist, der bereits in einem instance enthalten ist, ist keine strukturelle Änderung.) Dies wird in der Regel erreicht, indem für ein Objekt synchronisiert wird, das die Karte natürlich kapselt.

Wenn kein solches Objekt vorhanden ist, sollte die Zuordnung mithilfe der Collections#synchronizedMap Collections.synchronizedMap -Methode "umschlossen" werden. Dies erfolgt am besten bei der Erstellung, um den versehentlichen nicht synchronisierten Zugriff auf die Karte zu verhindern:

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

Die von der iterator -Methode der Auflistungen zurückgegebenen Iteratoren, die von allen "Auflistungsansichtsmethoden" dieser Klasse zurückgegeben werden, sind fail-fast: Wenn die Zuordnung jederzeit strukturell geändert wird, nachdem der Iterator erstellt wurde, außer über die eigene remove Methode des Iterators, löst der Iterator einen aus ConcurrentModificationException. Daher schlägt der Iterator angesichts gleichzeitiger Änderungen schnell und sauber fehl, anstatt willkürliches, nicht deterministisches Verhalten zu einem unbestimmten Zeitpunkt in der Zukunft zu riskieren.

Beachten Sie, dass das fail-fast-Verhalten eines Iterators nicht garantiert werden kann, da es im Allgemeinen unmöglich ist, bei nicht synchronisierter gleichzeitiger Änderung feste Garantien zu treffen. Fail-Fast-Iteratoren lösen ConcurrentModificationException nach bestem Aufwand aus. Daher wäre es falsch, ein Programm zu schreiben, das von dieser Ausnahme abhängig ist, um korrekt zu sein: Fail-Fast-Iteratoren sollten nur verwendet werden, um Fehler zu erkennen.

Diese Klasse ist ein Mitglied des Java Collections Framework.

In Version 1.4 hinzugefügt.

Java-Dokumentation für java.util.IdentityHashMap.

Teile dieser Seite sind Änderungen, die auf Arbeiten basieren, die vom Android Open Source Project erstellt und freigegeben wurden und gemäß den In Attribution License beschriebenen Begriffen verwendet werden.

Konstruktoren

IdentityHashMap()

Erstellt eine neue, leere Identitätshashzuordnung mit einer standardmäßig erwarteten maximalen Größe (21).

IdentityHashMap(IDictionary)

Erstellt eine neue Identitätshashzuordnung, die die Schlüssel-Wert-Zuordnungen in der angegebenen Zuordnung enthält.

IdentityHashMap(Int32)

Erstellt eine neue, leere Zuordnung mit der angegebenen maximalen Größe.

IdentityHashMap(IntPtr, JniHandleOwnership)

Ein Konstruktor, der beim Erstellen verwalteter Darstellungen von JNI-Objekten verwendet wird; wird von der Runtime aufgerufen.

Eigenschaften

Class

Gibt die Laufzeitklasse dieses Objectzurück.

(Geerbt von Object)
Handle

Das Handle für die zugrunde liegende Android-instance.

(Geerbt von Object)
IsEmpty

Hinzugefügt werden

(Geerbt von AbstractMap)
JniIdentityHashCode

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

(Geerbt von Object)
JniPeerMembers

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

PeerReference

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

(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()

Hinzugefügt werden

(Geerbt von AbstractMap)
Clone()

Gibt eine flache Kopie dieser Identitätshashzuordnung zurück: Die Schlüssel und Werte selbst werden nicht geklont.

ContainsKey(Object)

Hinzugefügt werden

(Geerbt von AbstractMap)
ContainsValue(Object)

Hinzugefügt werden

(Geerbt von AbstractMap)
Dispose()

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

(Geerbt von Object)
Dispose(Boolean)

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

(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)

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

Get(Object)

Hinzugefügt werden

(Geerbt von AbstractMap)
GetHashCode()

Gibt einen Hashcodewert für das Objekt zurück.

(Geerbt von Object)
JavaFinalize()

Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection feststellt, dass keine Verweise mehr auf das Objekt vorhanden sind.

(Geerbt von Object)
KeySet()

Hinzugefügt werden

(Geerbt von AbstractMap)
Notify()

Aktiviert einen einzelnen Thread, der auf den Monitor dieses Objekts wartet.

(Geerbt von Object)
NotifyAll()

Aktiviert alle Threads, die auf den Monitor dieses Objekts warten.

(Geerbt von Object)
Put(Object, Object)

Hinzugefügt werden

(Geerbt von AbstractMap)
PutAll(IDictionary)

Hinzugefügt werden

(Geerbt von AbstractMap)
Remove(Object)

Hinzugefügt werden

(Geerbt von AbstractMap)
ReplaceAll(IBiFunction)

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

SetHandle(IntPtr, JniHandleOwnership)

Legt die Handle-Eigenschaft fest.

(Geerbt von Object)
Size()

Hinzugefügt werden

(Geerbt von AbstractMap)
ToArray<T>()

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolgendarstellung des Objekts zurück.

(Geerbt von Object)
UnregisterFromRuntime()

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

(Geerbt von Object)
Values()

Hinzugefügt werden

(Geerbt von AbstractMap)
Wait()

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert ist, in der Regel durch <>Benachrichtigung</em> oder <em>interrupted</em>.

(Geerbt von Object)
Wait(Int64)

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert ist, in der Regel durch>< Benachrichtigung</em> oder <em>interrupted</em>, oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)
Wait(Int64, Int32)

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert ist, in der Regel durch>< Benachrichtigung</em> oder <em>interrupted</em>, oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

IJavaPeerable.Disposed()

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

(Geerbt von Object)
IJavaPeerable.DisposeUnlessReferenced()

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

(Geerbt von Object)
IJavaPeerable.Finalized()

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

(Geerbt von Object)
IJavaPeerable.JniManagedPeerState

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

(Geerbt von Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

(Geerbt von Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

(Geerbt von Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

(Geerbt von Object)

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

Führt eine Typkonvertierung mit Überprüfung der Android-Laufzeit aus.

JavaCast<TResult>(IJavaObject)

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

GetJniTypeName(IJavaPeerable)

Diese Klasse implementiert die Map -Schnittstelle mit einer Hashtabelle, wobei beim Vergleichen von Schlüsseln (und Werten) die Verweisgleichheit anstelle von Objektgleichheit verwendet wird.

Gilt für: