WeakHashMap 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 mit <schwachen>Schlüsseln</em>.
[Android.Runtime.Register("java/util/WeakHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class WeakHashMap : Java.Util.AbstractMap, IDisposable
[<Android.Runtime.Register("java/util/WeakHashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type WeakHashMap = class
inherit AbstractMap
interface IMap
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- Vererbung
- Attribute
- Implementiert
Hinweise
Hashtabellenbasierte Implementierung der Map Schnittstelle mit <schwachen>Schlüsseln</em>. Ein Eintrag in einem WeakHashMap Element wird automatisch entfernt, wenn der Schlüssel nicht mehr in der normalen Verwendung verwendet wird. Genauer gesagt verhindert das Vorhandensein einer Zuordnung für einen bestimmten Schlüssel nicht, dass der Schlüssel vom Garbage Collector verworfen wird, d. h., finalizierbar, abgeschlossen und dann erneut beansprucht wird. Wenn ein Schlüssel verworfen wurde, wird der Eintrag effektiv aus der Karte entfernt, sodass sich diese Klasse etwas anders verhält als andere Map Implementierungen.
Sowohl Nullwerte als auch null-Schlüssel werden unterstützt. Diese Klasse weist Leistungseigenschaften auf, die denen der HashMap Klasse ähneln, und die gleichen Effizienzparameter von <em>initial capacity</em> und <em>load factor</em>.
Wie die meisten Sammlungsklassen wird diese Klasse nicht synchronisiert. Eine synchronisierte WeakHashMap Methode kann mithilfe der Collections#synchronizedMap Collections.synchronizedMap Methode erstellt werden.
Diese Klasse ist in erster Linie für die Verwendung mit Schlüsselobjekten vorgesehen, deren equals Methoden mithilfe des == Operators auf Objektidentität testen. Sobald ein solcher Schlüssel verworfen wird, kann er nie neu erstellt werden, sodass es unmöglich ist, einen Nachschlagevorgang dieses Schlüssels zu einem WeakHashMap späteren Zeitpunkt zu erledigen und überrascht zu sein, dass der Eintrag entfernt wurde. Diese Klasse funktioniert perfekt mit Schlüsselobjekten, deren equals Methoden nicht auf Objektidentität basieren, z String . B. Instanzen. Bei solchen rereatable Key-Objekten kann das automatische Entfernen von WeakHashMap Einträgen, deren Schlüssel verworfen wurden, jedoch verwirrend sein.
Das Verhalten der WeakHashMap Klasse hängt teilweise von den Aktionen des Garbage Collector ab, sodass einige vertraute (jedoch nicht erforderliche) Map Invarianten für diese Klasse nicht enthalten sind. Da der Garbage Collector Schlüssel jederzeit verwerfen kann, verhält sich das Verhalten WeakHashMap möglicherweise so, als ob ein unbekannter Thread Einträge im Hintergrund entfernt. Insbesondere wenn Sie eine Synchronisierung für eine WeakHashMap Instanz durchführen und keine der zugehörigen Mutatormethoden aufrufen, ist es möglich, dass die size Methode kleinere Werte im Laufe der Zeit zurückgibt, damit die isEmpty Methode zurückgegeben false wird, und dann true, damit die containsKey Methode zurückgegeben true und später false für einen bestimmten Schlüssel einen get Wert für einen bestimmten Schlüssel zurückgibt, aber später zurückgegeben wird null, für die put zurückzugebende Methode und die Methode, die null für einen Schlüssel zurückgegeben removefalse werden soll, der zuvor in der Karte zu sehen war, und für aufeinander folgende Untersuchungen des Schlüsselsatzes, der Wertauflistung und des Eintragssatzes, der nach und nach kleineren Anzahl von Elementen zurückgegeben werden soll.
Jedes Schlüsselobjekt in einem WeakHashMap wird indirekt als Referenz eines schwachen Verweises gespeichert. Daher wird automatisch ein Schlüssel entfernt, nachdem die schwachen Verweise darauf sowohl innerhalb als auch außerhalb der Karte vom Garbage Collector gelöscht wurden.
<starker>Implementierungshinweis:</strong> Die Wertobjekte in einem WeakHashMap werden von gewöhnlichen starken Verweisen gehalten. Daher sollte sichergestellt werden, dass Wertobjekte weder direkt noch indirekt auf ihre eigenen Schlüssel verweisen, da dadurch verhindert wird, dass die Schlüssel verworfen werden. Beachten Sie, dass ein Wertobjekt indirekt über den WeakHashMap Schlüssel selbst auf seinen Schlüssel verweist, d. h. ein Wertobjekt kann stark auf ein anderes Schlüsselobjekt verweisen, dessen zugeordnetes Wertobjekt wiederum stark auf den Schlüssel des ersten Wertobjekts verweist. Wenn sich die Werte in der Karte nicht auf die Karte verlassen, die starke Verweise auf sie enthält, besteht eine Möglichkeit, dies zu umgehen, indem Sie Werte vor dem Einfügen selbst WeakReferences umschließen, wie in: m.put(key, new WeakReference(value)), und dann nach jedem get.
Die iteratoren, die von der Methode der Auflistungen zurückgegeben werden, die von allen "Sammlungsansichtsmethoden" dieser Klasse zurückgegeben werden, sind iterator: Wenn die Karte nach dem Erstellen des Iterators strukturell geändert wird, mit Ausnahme der eigenen remove Methode des Iterators, löst der Iterator eine .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 nicht synchronisierter gleichzeitiger Änderungen harte Garantien zu gewährleisten. 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.WeakHashMap.
Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die von der Android Open Source Project erstellt und gemeinsam verwendet und gemäß den in der 2.5 Attribution License beschriebenen Begriffen verwendet werden.
Konstruktoren
| Name | Beschreibung |
|---|---|
| WeakHashMap() |
Erstellt eine neue, leere |
| WeakHashMap(IDictionary) |
Erstellt eine neue |
| WeakHashMap(Int32, Single) |
Erstellt eine neue, leere |
| WeakHashMap(Int32) |
Erstellt eine neue, leere |
| WeakHashMap(IntPtr, JniHandleOwnership) |
Ein Konstruktor, der beim Erstellen verwalteter Darstellungen von JNI-Objekten verwendet wird; wird von der Laufzeit aufgerufen. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| Class |
Gibt die Laufzeitklasse dieses Werts |
| Handle |
Das Handle für die zugrunde liegende Android-Instanz. (Geerbt von Object) |
| IsEmpty |
Soll hinzugefügt werden (Geerbt von AbstractMap) |
| JniIdentityHashCode |
Ruft den Identitätshashcode ab, der diesem Java Peer von der Interop-Laufzeit zugewiesen ist. (Geerbt von Object) |
| JniManagedPeerState |
Hashtabellenbasierte Implementierung der |
| JniPeerMembers |
Hashtabellenbasierte Implementierung der |
| PeerReference |
Ruft den JNI-Objektverweis für diesen Java Peer ab. (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
| Name | Beschreibung |
|---|---|
| Clear() |
Soll hinzugefügt werden (Geerbt von AbstractMap) |
| Clone() |
Erstellt und gibt eine Kopie dieses Objekts zurück. (Geerbt von Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Hashtabellenbasierte Implementierung der |
| ContainsKey(Object) |
Soll hinzugefügt werden (Geerbt von AbstractMap) |
| ContainsValue(Object) |
Soll hinzugefügt werden (Geerbt von AbstractMap) |
| Dispose() |
Veröffentlicht die Ressourcen, die von diesem Java Peer gehalten werden. (Geerbt von Object) |
| Dispose(Boolean) |
Veröffentlicht die Ressourcen, die von diesem Java Peer gehalten werden. (Geerbt von Object) |
| DisposeUnlessReferenced() |
Hashtabellenbasierte Implementierung der |
| EntrySet() |
Gibt eine |
| Equals(Object) |
Hashtabellenbasierte Implementierung der |
| Equals(Object) |
Gibt an, ob ein anderes Objekt "gleich" diesem Objekt ist. (Geerbt von Object) |
| ForEach(IBiConsumer) |
Hashtabellenbasierte Implementierung der |
| Get(Object) |
Soll 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 bestimmt, dass keine weiteren Verweise auf das Objekt vorhanden sind. (Geerbt von Object) |
| KeySet() |
Soll hinzugefügt werden (Geerbt von AbstractMap) |
| NewWeakHashMap(Int32) |
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) |
Soll hinzugefügt werden (Geerbt von AbstractMap) |
| PutAll(IDictionary) |
Soll hinzugefügt werden (Geerbt von AbstractMap) |
| Remove(Object) |
Soll hinzugefügt werden (Geerbt von AbstractMap) |
| ReplaceAll(IBiFunction) |
Hashtabellenbasierte Implementierung der |
| SetHandle(IntPtr, JniHandleOwnership) |
Legt die Handle-Eigenschaft fest. (Geerbt von Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Hashtabellenbasierte Implementierung der |
| Size() |
Soll hinzugefügt werden (Geerbt von AbstractMap) |
| ToArray<T>() |
Erstellt ein verwaltetes Array aus diesem Java Arraywrapper. (Geerbt von Object) |
| ToString() |
Gibt eine Zeichenfolgendarstellung des Objekts zurück. (Geerbt von Object) |
| UnregisterFromRuntime() |
Hebt die Registrierung dieses Java Peers aus der Interop-Laufzeit auf. (Geerbt von Object) |
| Values() |
Soll hinzugefügt werden (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, 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) |
| 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) |
Explizite Schnittstellenimplementierungen
| Name | Beschreibung |
|---|---|
| IJavaPeerable.Disposed() |
Hashtabellenbasierte Implementierung der |
| IJavaPeerable.Finalized() |
Hashtabellenbasierte Implementierung der |
| IJavaPeerable.JniObjectReferenceControlBlock |
Hashtabellenbasierte Implementierung der |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Hashtabellenbasierte Implementierung der |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Hashtabellenbasierte Implementierung der |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Hashtabellenbasierte Implementierung der |
| IJavaPeerable.UnregisterFromRuntime() |
Hashtabellenbasierte Implementierung der |
Erweiterungsmethoden
| Name | Beschreibung |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Ruft den JNI-Namen des Typs der Instanz |
| JavaAs<TResult>(IJavaPeerable) |
Versuchen Sie, die Eingabe |
| JavaCast<TResult>(IJavaObject) |
Führt eine android-laufzeitgecheckte Typkonvertierung aus. |
| JavaCast<TResult>(IJavaObject) |
Hashtabellenbasierte Implementierung der |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Versuchen Sie, die Eingabe |