LinkedHashMap 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.
Hashtabellen- und verknüpfte Listenimplementierung der Map Schnittstelle mit klar definierter Begegnungsreihenfolge.
[Android.Runtime.Register("java/util/LinkedHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class LinkedHashMap : Java.Util.HashMap, IDisposable, Java.Util.ISequencedMap
[<Android.Runtime.Register("java/util/LinkedHashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type LinkedHashMap = class
inherit HashMap
interface IMap
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface ISequencedMap
- Vererbung
- Attribute
- Implementiert
Hinweise
Hashtabellen- und verknüpfte Listenimplementierung der Map Schnittstelle mit klar definierter Begegnungsreihenfolge. Diese Implementierung unterscheidet sich von HashMap der, dass eine doubly verknüpfte Liste verwaltet wird, die alle Einträge durchläuft. Diese verknüpfte Liste definiert die Begegnungsreihenfolge (die Reihenfolge der Iteration), die normalerweise die Reihenfolge ist, in der Schlüssel in die Karte eingefügt wurden (Einfügereihenfolge). Der zuletzt eingefügte Eintrag (der älteste) ist zuerst, und der jüngste Eintrag ist zuletzt vorhanden. Beachten Sie, dass die Reihenfolge der Begegnung nicht betroffen ist, wenn ein Schlüssel mit der Methode erneut in die Karte put wird. (Ein Schlüssel k wird erneut in eine Karte m eingefügt, wenn m.put(k, v) diese aufgerufen wird, wenn m.containsKey(k) sie unmittelbar vor dem Aufruf zurückgegeben true würde.) Die umgekehrte Ansicht dieser Karte befindet sich in der entgegengesetzten Reihenfolge, wobei der jüngste Eintrag zuerst angezeigt wird und der älteste Eintrag zuletzt angezeigt wird. Die Reihenfolge der Einträge, die sich bereits in der Karte befinden, kann mithilfe der #putFirst putFirst methoden geändert #putLast putLast werden.
Diese Implementierung spart ihren Kunden die nicht spezifizierte, im Allgemeinen chaotische Anordnung von HashMap (und Hashtable), ohne die erhöhten Kosten im Zusammenhang mit TreeMap. Es kann verwendet werden, um eine Kopie einer Karte zu erstellen, die die gleiche Reihenfolge wie das Original aufweist, unabhängig von der Implementierung der ursprünglichen Karte:
{@code
void foo(Map<String, Integer> m) {
Map<String, Integer> copy = new LinkedHashMap<>(m);
...
}
}
Diese Technik ist besonders nützlich, wenn ein Modul eine Karte für eingaben, kopiert und später Ergebnisse zurückgibt, deren Reihenfolge durch die Kopie bestimmt wird. (Kunden schätzen in der Regel, dass Dies in derselben Reihenfolge zurückgegeben wurde, in der sie präsentiert wurden.)
Es wird ein Spezielles #LinkedHashMap(int,float,boolean) constructor bereitgestellt, um eine verknüpfte Hashzuordnung zu erstellen, deren Auftreffreihenfolge die Reihenfolge ist, in der ihre Einträge zuletzt aufgerufen wurden, von der letzten Zugriff auf zuletzt aufgerufene (Zugriffsreihenfolge). Diese Art von Karte eignet sich gut zum Erstellen von LRU-Caches. Das Aufrufen der putMethoden , , putIfAbsent, get, getOrDefaultcompute, , computeIfAbsentoder computeIfPresentmerge Methoden führt zu einem Zugriff auf den entsprechenden Eintrag (vorausgesetzt, sie ist nach Abschluss des Aufrufs vorhanden). Die replace Methoden führen nur zu einem Zugriff des Eintrags, wenn der Wert ersetzt wird. Die putAll Methode generiert einen Eintragszugriff für jede Zuordnung in der angegebenen Karte, in der Reihenfolge, in der Schlüsselwertzuordnungen vom Eintragssatz-Iterator der angegebenen Karte bereitgestellt werden. Keine anderen Methoden generieren Eingabezugriffe. Durch Aufrufen dieser Methoden für die umgekehrte Ansicht werden Zugriffe auf Einträge auf der Sicherungskarte generiert. Beachten Sie, dass der Zugriff auf einen Eintrag in der umgekehrten Ansicht zuerst in der Reihenfolge der Begegnung verschoben wird. Explizite Positionierungsmethoden, z putFirst . B. oder lastEntry, ob auf der Karte oder in der umgekehrten Ansicht, führen den Positionierungsvorgang aus und generieren keine Eingabezugriffe. Vorgänge auf den keySetvalues, und Ansichten oder entrySet auf ihren sequenzierten Gegenstücken wirken sich nicht auf die Auftreffreihenfolge der zugrunde stehenden Karte aus.
Die #removeEldestEntry(Map.Entry) Methode kann außer Kraft gesetzt werden, um eine Richtlinie zum automatischen Entfernen veralteter Zuordnungen zu erzwingen, wenn der Karte neue Zuordnungen hinzugefügt werden. Da der "älteste" Eintrag der erste Eintrag in der Reihenfolge der Begegnung ist, können Programme veraltete Zuordnungen mithilfe der #firstEntry firstEntry Methoden #pollFirstEntry pollFirstEntry prüfen und entfernen.
Diese Klasse stellt alle optionalen Map Und Vorgänge bereit SequencedMap , und sie erlaubt NULL-Elemente. Wie HashMapdies der Fall ist, bietet es eine konstante Zeitleistung für die grundlegenden Vorgänge (addund contains), vorausgesetzt, remove die Hashfunktion verteilt Elemente ordnungsgemäß zwischen den Buckets. Die Leistung ist aufgrund der zusätzlichen Kosten für die Aufrechterhaltung der verknüpften Liste mit einer Ausnahme wahrscheinlich etwas unter dem HashMapwert: Iteration über die Sammlungsansichten einer LinkedHashMap Karte erfordert Zeit proportional zur Größe der Karte, unabhängig von der Kapazität. Die Iteration eines HashMap Vorgangs ist wahrscheinlich teurer und erfordert Zeit proportional zu seiner Kapazität.
Eine verknüpfte Hashzuordnung hat zwei Parameter, die sich auf die Leistung auswirken: anfängliche Kapazität und Auslastungsfaktor. Sie werden genau wie vorgesehen HashMapdefiniert. Beachten Sie jedoch, dass die Strafe für die Auswahl eines übermäßig hohen Werts für die anfängliche Kapazität für diese Klasse weniger schwerwiegend ist als für HashMap, da Iterationszeiten für diese Klasse von der Kapazität nicht betroffen sind.
<strong>Note that this implementation is not synchronized.</strong> Wenn mehrere Threads gleichzeitig auf eine verknüpfte Hashzuordnung zugreifen und mindestens einer der Threads die Zuordnung strukturell ändert, <muss> em</em> extern synchronisiert werden. 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 mithilfe 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 LinkedHashMap(...));
Eine strukturelle Änderung ist jeder Vorgang, der eine oder mehrere Zuordnungen hinzufügt oder löscht, oder im Falle von verknüpften Hashzuordnungen mit Zugriffsreihenfolge wirkt sich auf die Iterationsreihenfolge aus. Bei verknüpften Hashzuordnungen in der Einfügereihenfolge ist es keine strukturelle Änderung, wenn nur der Wert geändert wird, der einem Schlüssel zugeordnet ist, der bereits in der Karte enthalten ist.
<starke>verknüpfte Hashzuordnungen mit Zugriffsreihenfolge, sondern lediglich das Abfragen der Karte mit get einer strukturellen Änderung.
</strong>)
Die iteratoren, die von der Methode der Auflistungen zurückgegeben werden, die von allen Auflistungsansichtsmethoden dieser Klasse zurückgegeben werden, sind iteratorem<fail-fast>/em<: 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.
Die Spliteratoren, die von der Spliteratormethode der Auflistungen zurückgegeben werden, die von allen Auflistungsansichtsmethoden dieser Klasse zurückgegeben werden, sind <em late-binding></em, >em<fail-fast>/em<> und zusätzlich berichtigenSpliterator#ORDERED.
<em>Hinweis</em>: Die Implementierung dieser Spliteratoren in Android Nougat (API-Ebene 24 und 25) verwendet die falsche Reihenfolge (inkonsistent mit den Iteratoren, die die richtige Reihenfolge verwenden), trotz der Berichterstattung Spliterator#ORDERED. Sie können die folgenden Codefragmente verwenden, um einen ordnungsgemäß sortierten Spliterator auf API-Ebene 24 und 25 zu erhalten: <ul><li>Für eine Sammlungsansicht c = lhm.keySet()c = lhm.entrySet() oder c = lhm.values()anstelle java.util.Spliterators.spliterator(c, c.spliterator().characteristics()) von c.spliterator().
<li>anstelle oder c.stream()c.parallelStream(), verwenden java.util.stream.StreamSupport.stream(spliterator, false) Sie, um eine (nichtparallel) java.util.stream.Stream aus einer solchen Spliteratorzu konstruieren.
</ul> Beachten Sie, dass diese Problemumgehungen nur vorgeschlagen werden, wenn lhm es sich um ein LinkedHashMap.
Diese Klasse ist ein Mitglied des Java Collections Framework.
In 1.4 hinzugefügt.
Java Dokumentation für java.util.LinkedHashMap.
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 |
|---|---|
| LinkedHashMap() |
Erstellt eine leere einfügereihenfolgete |
| LinkedHashMap(IDictionary) |
Erstellt eine einfügereihenfolgete |
| LinkedHashMap(Int32, Single, Boolean) |
Erstellt eine leere |
| LinkedHashMap(Int32, Single) |
Erstellt eine leere einfügereihenfolgete |
| LinkedHashMap(Int32) |
Erstellt eine leere einfügereihenfolgete |
| LinkedHashMap(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 |
Hashtabellen- und verknüpfte Listenimplementierung der |
| JniPeerMembers |
Hashtabellen- und verknüpfte Listenimplementierung 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() |
Gibt eine flache Kopie dieser |
| Compute(Object, IBiFunction) |
Hashtabellen- und verknüpfte Listenimplementierung der |
| ComputeIfAbsent(Object, IFunction) |
Hashtabellen- und verknüpfte Listenimplementierung der |
| ComputeIfPresent(Object, IBiFunction) |
Hashtabellen- und verknüpfte Listenimplementierung der |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Hashtabellen- und verknüpfte Listenimplementierung 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() |
Hashtabellen- und verknüpfte Listenimplementierung der |
| EntrySet() |
Gibt eine |
| Equals(Object) |
Hashtabellen- und verknüpfte Listenimplementierung der |
| Equals(Object) |
Gibt an, ob ein anderes Objekt "gleich" diesem Objekt ist. (Geerbt von Object) |
| ForEach(IBiConsumer) |
Hashtabellen- und verknüpfte Listenimplementierung der |
| Get(Object) |
Soll hinzugefügt werden (Geerbt von AbstractMap) |
| GetHashCode() |
Gibt einen Hashcodewert für das Objekt zurück. (Geerbt von Object) |
| GetOrDefault(Object, Object) |
Hashtabellen- und verknüpfte Listenimplementierung 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() |
Soll hinzugefügt werden (Geerbt von AbstractMap) |
| Merge(Object, Object, IBiFunction) |
Hashtabellen- und verknüpfte Listenimplementierung der |
| NewLinkedHashMap(Int32) |
Hashtabellen- und verknüpfte Listenimplementierung 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) |
| PutFirst(Object, Object) |
Soll hinzugefügt werden |
| PutIfAbsent(Object, Object) |
Hashtabellen- und verknüpfte Listenimplementierung der |
| PutLast(Object, Object) |
Soll hinzugefügt werden |
| Remove(Object, Object) |
Entfernt die Zuordnung für den angegebenen Schlüssel aus dieser Karte, falls vorhanden. (Geerbt von HashMap) |
| Remove(Object) |
Soll hinzugefügt werden (Geerbt von AbstractMap) |
| RemoveEldestEntry(IMapEntry) |
Gibt zurück |
| Replace(Object, Object, Object) |
Hashtabellen- und verknüpfte Listenimplementierung der |
| Replace(Object, Object) |
Hashtabellen- und verknüpfte Listenimplementierung der |
| ReplaceAll(IBiFunction) |
Hashtabellen- und verknüpfte Listenimplementierung der |
| Reversed() |
Hashtabellen- und verknüpfte Listenimplementierung der |
| SequencedEntrySet() |
Hashtabellen- und verknüpfte Listenimplementierung der |
| SequencedKeySet() |
Hashtabellen- und verknüpfte Listenimplementierung der |
| SequencedValues() |
Hashtabellen- und verknüpfte Listenimplementierung der |
| SetHandle(IntPtr, JniHandleOwnership) |
Legt die Handle-Eigenschaft fest. (Geerbt von Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Hashtabellen- und verknüpfte Listenimplementierung 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() |
Hashtabellen- und verknüpfte Listenimplementierung der |
| IJavaPeerable.Finalized() |
Hashtabellen- und verknüpfte Listenimplementierung der |
| IJavaPeerable.JniObjectReferenceControlBlock |
Hashtabellen- und verknüpfte Listenimplementierung der |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Hashtabellen- und verknüpfte Listenimplementierung der |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Hashtabellen- und verknüpfte Listenimplementierung der |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Hashtabellen- und verknüpfte Listenimplementierung der |
| IJavaPeerable.UnregisterFromRuntime() |
Hashtabellen- und verknüpfte Listenimplementierung 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) |
Hashtabellen- und verknüpfte Listenimplementierung der |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Versuchen Sie, die Eingabe |