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.
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 TreeMap
verbundenen 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 put
Methoden , putIfAbsent
, get
, getOrDefault
compute
, 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 HashMap
bietet es eine konstante Zeitleistung für die grundlegenden Vorgänge (add
und contains
remove
), vorausgesetzt, die Hashfunktion verteilt Elemente ordnungsgemäß auf die Buckets. Die Leistung wird wahrscheinlich aufgrund des zusätzlichen Aufwands HashMap
fü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 HashMap
definiert. 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#ORDERED
zusä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 Spliterator
solchen zu konstruieren. </ul> Beachten Sie, dass diese Problemumgehungen nur vorgeschlagen werden, wenn lhm
ein LinkedHashMap
ist.
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(IDictionary) |
Erstellt eine einfügereihenfolgete |
LinkedHashMap(Int32) |
Erstellt eine leere einfügereihenfolgete |
LinkedHashMap(Int32, Single) |
Erstellt eine leere einfügereihenfolgete |
LinkedHashMap(Int32, Single, Boolean) |
Erstellt eine leere |
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 |
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 |
JniPeerMembers |
Hashtabelle und verknüpfte Listenimplementierung der |
PeerReference |
Hashtabelle und verknüpfte Listenimplementierung der |
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 |
Compute(Object, IBiFunction) |
Hashtabelle und verknüpfte Listenimplementierung der |
ComputeIfAbsent(Object, IFunction) |
Hashtabelle und verknüpfte Listenimplementierung der |
ComputeIfPresent(Object, IBiFunction) |
Hashtabelle und verknüpfte Listenimplementierung der |
ContainsKey(Object) |
Hinzugefügt werden (Geerbt von AbstractMap) |
ContainsValue(Object) |
Hinzugefügt werden (Geerbt von AbstractMap) |
Dispose() |
Hashtabelle und verknüpfte Listenimplementierung der |
Dispose(Boolean) |
Hashtabelle und verknüpfte Listenimplementierung der |
EntrySet() |
Gibt eine |
Equals(Object) |
Gibt an, ob ein anderes Objekt "gleich" diesem objekt ist. (Geerbt von Object) |
ForEach(IBiConsumer) |
Hashtabelle und verknüpfte Listenimplementierung der |
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 |
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 |
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 |
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 |
Replace(Object, Object) |
Hashtabelle und verknüpfte Listenimplementierung der |
Replace(Object, Object, Object) |
Hashtabelle und verknüpfte Listenimplementierung der |
ReplaceAll(IBiFunction) |
Hashtabelle und verknüpfte Listenimplementierung der |
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 |
ToString() |
Gibt eine Zeichenfolgendarstellung des Objekts zurück. (Geerbt von Object) |
UnregisterFromRuntime() |
Hashtabelle und verknüpfte Listenimplementierung der |
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 |
IJavaPeerable.DisposeUnlessReferenced() |
Hashtabelle und verknüpfte Listenimplementierung der |
IJavaPeerable.Finalized() |
Hashtabelle und verknüpfte Listenimplementierung der |
IJavaPeerable.JniManagedPeerState |
Hashtabelle und verknüpfte Listenimplementierung der |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Hashtabelle und verknüpfte Listenimplementierung der |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Hashtabelle und verknüpfte Listenimplementierung der |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Hashtabelle und verknüpfte Listenimplementierung der |
Erweiterungsmethoden
JavaCast<TResult>(IJavaObject) |
Führt eine Typkonvertierung mit Überprüfung der Android-Laufzeit aus. |
JavaCast<TResult>(IJavaObject) |
Hashtabelle und verknüpfte Listenimplementierung der |
GetJniTypeName(IJavaPeerable) |
Hashtabelle und verknüpfte Listenimplementierung der |