Share via


LinkedHashMap Klasse

Definition

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

[Android.Runtime.Register("java/util/LinkedHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class LinkedHashMap : Java.Util.HashMap, IDisposable, Java.Interop.IJavaPeerable
[<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
Vererbung
Attribute
Implementiert

Hinweise

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge. Diese Implementierung unterscheidet sich darin HashMap , dass sie eine doppelt verknüpfte Liste verwaltet, die alle Einträge durchläuft. Diese verknüpfte Liste definiert die Iterationsreihenfolge, die normalerweise die Reihenfolge ist, in der Schlüssel in die Zuordnung eingefügt wurden (Einfügereihenfolge). Beachten Sie, dass die Einfügereihenfolge nicht beeinträchtigt wird, wenn ein Schlüssel erneut in die Karte eingefügt wird. (Ein Schlüssel k wird erneut in eine Zuordnung m eingefügt, wenn m.put(k, v) aufgerufen wird, wann m.containsKey(k) unmittelbar vor dem Aufruf zurückgegeben true würde.)

Diese Implementierung verschont ihre Kunden von der nicht angegebenen, im Allgemeinen chaotischen Reihenfolge, die von HashMap (und Hashtable) bereitgestellt wird, ohne dass die mit TreeMapverbundenen höheren Kosten entstehen. 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:

void foo(Map m) {
                    Map copy = new LinkedHashMap(m);
                    ...
                }

Diese Technik ist besonders nützlich, wenn ein Modul eine Karte bei der Eingabe verwendet, kopiert und später Ergebnisse zurückgibt, deren Reihenfolge durch die der Kopie bestimmt wird. (Kunden schätzen es im Allgemeinen, dass Die Dinge in derselben Reihenfolge zurückgegeben werden, in der sie präsentiert wurden.)

Ein Spezielles #LinkedHashMap(int,float,boolean) constructor wird bereitgestellt, um eine verknüpfte Hashzuordnung zu erstellen, deren Iterationsreihenfolge die Reihenfolge ist, in der auf die Einträge zuletzt zugegriffen wurde, von der letzten Zugriffsebene bis zuletzt (Zugriffsreihenfolge). Diese Art von Zuordnung eignet sich gut zum Erstellen von LRU-Caches. Das Aufrufen der putMethoden , putIfAbsent, get, getOrDefaultcompute, computeIfAbsent, computeIfPresent, oder merge führt zu einem Zugriff auf den entsprechenden Eintrag (vorausgesetzt, er ist nach Abschluss des Aufrufs vorhanden). Die replace Methoden führen nur dann zu einem Zugriff auf den Eintrag, wenn der Wert ersetzt wird. Die putAll -Methode generiert einen Eintragszugriff für jede Zuordnung in der angegebenen Zuordnung in der Reihenfolge, in der Schlüssel-Wert-Zuordnungen vom Eintragssatziterator der angegebenen Zuordnung bereitgestellt werden. Keine anderen Methoden generieren Eingabezugriffe. Insbesondere haben Vorgänge für Sammlungsansichten keinen Einfluss auf die Iterationsreihenfolge der Sicherungszuordnung.

Die #removeEldestEntry(Map.Entry) -Methode kann überschrieben werden, um eine Richtlinie zum automatischen Entfernen veralteter Zuordnungen zu erzwingen, wenn der Karte neue Zuordnungen hinzugefügt werden.

Diese Klasse stellt alle optionalen Map Vorgänge bereit und lässt NULL-Elemente zu. Wie HashMapbietet es eine konstante Zeitleistung für die grundlegenden Vorgänge (addund containsremove), vorausgesetzt, die Hashfunktion verteilt Elemente ordnungsgemäß auf die Buckets. Die Leistung wird wahrscheinlich aufgrund des zusätzlichen Aufwands HashMapfür die Verwaltung der verknüpften Liste leicht unter der von liegen, mit einer Ausnahme: Die Iteration über die Sammlungsansichten eines LinkedHashMap erfordert zeit proportional zur Größe der Karte, unabhängig von ihrer Kapazität. Die Iteration über ein HashMap ist wahrscheinlich teurer und erfordert zeit proportional zu seiner Kapazität.

Eine verknüpfte Hashzuordnung verfügt über zwei Parameter, die sich auf die Leistung auswirken: anfängliche Kapazität und Auslastungsfaktor. Sie werden genau wie für HashMapdefiniert. Beachten Sie jedoch, dass die Strafe für die Auswahl eines zu 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>Beachten Sie, dass diese Implementierung nicht synchronisiert wird.</strong> Wenn mehrere Threads gleichzeitig auf eine verknüpfte Hashzuordnung zugreifen und mindestens einer der Threads die Zuordnung strukturell ändert, muss</<>em> extern synchronisiert werden. 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 LinkedHashMap(...));

Eine strukturelle Änderung ist ein Vorgang, der eine oder mehrere Zuordnungen hinzufügt oder löscht oder sich im Fall von verknüpften Hashzuordnungen in Zugriffsreihenfolge auf die Iterationsreihenfolge auswirkt. In verknüpften Hashzuordnungen mit Einfügungsreihenfolge ist das bloße Ändern des Werts, der einem Schlüssel zugeordnet ist, der bereits in der Karte enthalten ist, keine strukturelle Änderung. <strong>Bei verknüpften Hashzuordnungen in Zugriffsreihenfolge ist die bloße Abfrage der Karte mit get eine strukturelle Änderung. </strong>)

Die von der -Methode der iterator Auflistungen zurückgegebenen Iteratoren, die von allen Auflistungsansichtsmethoden dieser Klasse zurückgegeben werden, sind <em>fail-fast</em>: Wenn die Zuordnung zu einem beliebigen Zeitpunkt nach der Erstellung des Iterators strukturell geändert wird, außer über die methode remove 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 war, um korrekt zu sein: Das fail-fast-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 Methoden der Auflistungsansicht dieser Klasse zurückgegeben werden, sind <em>late-binding</em>, <em>fail-fast</em> und melden Spliterator#ORDEREDzusätzlich . <em>Note</em>: Die Implementierung dieser Spliteratoren in Android Nougat (API-Ebenen 24 und 25) verwendet die falsche Reihenfolge (inkonsistent mit den Iteratoren, die die richtige Reihenfolge verwenden), obwohl gemeldet wurde 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()oder c = lhm.entrySet()c = lhm.values()verwenden Sie java.util.Spliterators.spliterator(c, c.spliterator().characteristics()) anstelle von c.spliterator(). <verwenden>Sie java.util.stream.StreamSupport.stream(spliterator, false) anstelle von c.stream() oder c.parallelStream(), um eine (nicht parallele) java.util.stream.Stream aus einer Spliteratorsolchen zu konstruieren. </ul> Beachten Sie, dass diese Problemumgehungen nur vorgeschlagen werden, wenn lhm ein LinkedHashMapist.

Diese Klasse ist ein Mitglied des Java Collections Framework.

In Version 1.4 hinzugefügt.

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

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

LinkedHashMap()

Erstellt eine leere instance in der Einfügereihenfolge LinkedHashMap mit der Standardanfangskapazität (16) und dem Lastfaktor (0).

LinkedHashMap(IDictionary)

Erstellt eine einfügereihenfolgete LinkedHashMap instance mit den gleichen Zuordnungen wie die angegebene Zuordnung.

LinkedHashMap(Int32)

Erstellt eine leere einfügereihenfolgete LinkedHashMap instance mit der angegebenen Anfangskapazität und einem Standardladefaktor (0.

LinkedHashMap(Int32, Single)

Erstellt eine leere einfügereihenfolgete LinkedHashMap instance mit der angegebenen Anfangskapazität und dem angegebenen Auslastungsfaktor.

LinkedHashMap(Int32, Single, Boolean)

Erstellt eine leere LinkedHashMap instance mit der angegebenen Anfangskapazität, dem angegebenen Auslastungsfaktor und dem angegebenen Reihenfolgenmodus.

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

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von Object)
JniPeerMembers

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

PeerReference

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(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 dieses HashMap instance zurück: Die Schlüssel und Werte selbst werden nicht geklont.

(Geerbt von HashMap)
Compute(Object, IBiFunction)

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von HashMap)
ComputeIfAbsent(Object, IFunction)

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von HashMap)
ComputeIfPresent(Object, IBiFunction)

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von HashMap)
ContainsKey(Object)

Hinzugefügt werden

(Geerbt von AbstractMap)
ContainsValue(Object)

Hinzugefügt werden

(Geerbt von AbstractMap)
Dispose()

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von Object)
Dispose(Boolean)

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von Object)
EntrySet()

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

(Geerbt von HashMap)
Equals(Object)

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

(Geerbt von Object)
ForEach(IBiConsumer)

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von HashMap)
Get(Object)

Hinzugefügt werden

(Geerbt von AbstractMap)
GetHashCode()

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

(Geerbt von Object)
GetOrDefault(Object, Object)

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von HashMap)
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)
Merge(Object, Object, IBiFunction)

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von HashMap)
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)
PutIfAbsent(Object, Object)

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von HashMap)
Remove(Object)

Hinzugefügt werden

(Geerbt von AbstractMap)
Remove(Object, Object)

Entfernt die Zuordnung für den angegebenen Schlüssel aus dieser Zuordnung, sofern vorhanden.

(Geerbt von HashMap)
RemoveEldestEntry(IMapEntry)

Gibt zurück true , wenn diese Zuordnung den ältesten Eintrag entfernen soll.

Replace(Object, Object)

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von HashMap)
Replace(Object, Object, Object)

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von HashMap)
ReplaceAll(IBiFunction)

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von HashMap)
SetHandle(IntPtr, JniHandleOwnership)

Legt die Handle-Eigenschaft fest.

(Geerbt von Object)
Size()

Hinzugefügt werden

(Geerbt von AbstractMap)
ToArray<T>()

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolgendarstellung des Objekts zurück.

(Geerbt von Object)
UnregisterFromRuntime()

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

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

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von Object)
IJavaPeerable.DisposeUnlessReferenced()

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von Object)
IJavaPeerable.Finalized()

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von Object)
IJavaPeerable.JniManagedPeerState

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

(Geerbt von Object)

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

GetJniTypeName(IJavaPeerable)

Hashtabelle und verknüpfte Listenimplementierung der Map Schnittstelle mit vorhersagbarer Iterationsreihenfolge.

Gilt für: