Ich frage mich, ob es ein Gegenstück zu java.util.LinkedHashMap
in .NET gibt? (dh die Elemente werden automatisch neu geordnet, wenn ich auf ein Element zugreife. (boolean accessOrder)).LinkedHashMap in .NET
Antwort
Ein bisschen Googeln scheint zu zeigen, dass es für LinkedHashMap kein eingebautes C# -Äquivalent gibt, aber es gibt einige Optionen von Drittanbietern.
Ihr Link ist kaputt. – user
Nur um ein bisschen für die Leser zu verdeutlichen: LinkedHashMap verhält sich nur so, wenn mit einer bestimmten Konstruktorüberladung gebaut wird. Normalerweise werden die Elemente in Einfügereihenfolge verwaltet. (Das fühlt sich ein bisschen seltsam an, aber macht nichts.)
Ich glaube nicht, dass es solche Klassen in .NET gibt. Es wäre nicht schwer, einen zu erstellen, indem Sie eine verkettete Liste von Elementen und ein Wörterbuch vom Schlüssel zum verknüpften Listenknoten verwenden. Der Zugriff würde dann darin bestehen, den Knoten der verknüpften Liste zu holen, ihn zum Kopf zu bewegen und den Wert zurückzugeben.
Ich wäre glücklich, es heute Abend oder morgen zu implementieren, wenn Sie wollen - (! Fully Testen einer Sammlung ein zeitaufwendiges Geschäft ist), obwohl wahrscheinlich nicht mit voller Unit-Tests usw.
Was ist so eine ungerade Klasse (die sich je nach ctor unterschiedlich verhält) sinnvoll? – configurator
@configurator: Eine typische Optimierung für Hash-Tabellen: Verschieben Sie das Element, auf das zuletzt zugegriffen wurde, an den Anfang seiner Kette; Je häufiger auf ein Element zugegriffen wird, desto schneller wird es gefunden. Wenn Sie sich je nach ctor anders verhalten, denken Sie daran, einen anderen IComparer an eine SortedList zu übergeben. –
@Vojislav: Dies ist keine "typische Optimierung". LinkedHashMap verschiebt Einträge nicht in Buckets, sondern erinnert sich daran, wann die einzelnen Einträge verwendet wurden, und verschiebt den Eintrag an den Anfang der Liste "Zuletzt verwendete Einträge". Dies betrifft nur die Iterationsreihenfolge, nicht die Suchgeschwindigkeit der nächsten Suchvorgänge. –
Hier ist eine C# -Implementierung I gefunden auf einem forum:
Es ist undokumentiert, aber hat einige Tests. Es ist jedoch nicht generisch. Zumindest ist es etwas, denke ich.
@Jon: Ich würde es auch schätzen, wenn Sie eine schnelle Implementierung machen könnten. Ich stellte mir vor, dass ein Dictionary oben auf einer LinkedList am besten wäre, aber I hear gibt es Garbage Collection-Probleme mit LinkedList, die Dinge verlangsamt.
Garbage Collection-Problem kann mit Knotenpool gelöst werden. Sie würden jedoch eine benutzerdefinierte doppelt verknüpfte Listenimplementierung benötigen. –
Ich habe System.Collections.Specialized.OrderedDictionary als Ersatz für LinkedHashMap verwendet. Es hat für mich funktioniert. Gibt es irgendetwas, was ich an OrderedDictionary vermisse (ja, es ist nicht generisch, aber es ist mit .Net 2 oder neuer verfügbar)?
Es scheint mir, dass OrderedDictionary unterscheidet sich von LinkedHashMap in zwei wichtigen Punkten. 1) Der LinkedHashMap-Eintrag wird nach dem Lesen nach vorne verschoben. Das heißt, die Reihenfolge wird sowohl durch Einfügen als auch durch Auswahl (Zugriff) bestimmt. 2) LinkedHashMap hat eine Überladungsmethode removeEldestEntry. Beide Funktionen sind nützlich, wenn Sie einen Cache erstellen möchten. –
Nhibernate verfügt über eine NHibernate.Util.LinkedHashMap-Implementierung.
Wenn Sie bereits auf den Code, wie ich hatte, kann es nützlich sein,
- 1. Sortierung LinkedHashMap
- 2. LinkedHashMap Sortierung
- 3. Äquivalent für LinkedHashMap in Python
- 4. Schreibe LinkedHashMap in eine Textdatei?
- 5. C# Äquivalent von LinkedHashMap
- 6. LinkedHashMap LIFO oder FIFO?
- 7. LinkedHashMap bestellen Ausgabe
- 8. die Methode addEntry in LinkedHashMap in Java
- 9. Casting LinkedHashMap zu komplexem Objekt
- 10. Holen Sie den nächsten Artikel in LinkedHashMap?
- 11. Fehler beim Erweitern von LinkedHashMap
- 12. Wie konvertiert man LinkedHashMap in ein benutzerdefiniertes Java-Objekt?
- 13. So zeigen Sie eine LinkedHashMap <string, LinkedHashMap <string, string >> auf Android
- 14. Hat Java's LinkedHashMap die Reihenfolge der Schlüssel?
- 15. So ersetzen Sie den Wert in bestimmten Schlüssel in LinkedHashMap
- 16. LinkedHashMap removeEldestEntry Entfernen von 2 Elementen?
- 17. LinkedHashMap <String, Objekt> .clone();
- 18. Effiziente Art der Implementierung einer benutzerdefinierten LinkedHashMap
- 19. GSON fromJson zurück LinkedHashMap anstelle von EnumMap
- 20. LinkedHashMap vs HashMap! = LinkedList vs ArrayList
- 21. Wie kann die LinkedHashMap-Sortierung in JSONObject beibehalten werden?
- 22. Wie kann ich die in LinkedHashMap gespeicherten Daten ausdrucken
- 23. Insertion-Order Dictionary (wie Java's LinkedHashMap) in Swift?
- 24. Sorgt entrySet() in einer LinkedHashMap auch für Ordnung?
- 25. Warum Linkedhashmap doppelt verknüpfte Liste für Iteration verwaltet
- 26. Wie bekomme ich die Submap von LinkedHashMap nach Element-Index?
- 27. ConcurrentModificationException auch bei der Verwendung von Collections.sychronizedMap auf einem LinkedHashMap
- 28. Wie wird eine LinkedHashMap nach dem Feld ihrer Wertklasse sortiert?
- 29. Besteht eine Auflistung (Werte) von LinkedHashMap den Anzeigenauftrag?
- 30. Wie Hörer von LinkedHashMap Objekte zu entfernen, wenn der Schlüssel
Ich mag würde die Logik verstehen, wobei lediglich ein Element in der Sammlung Zugriff als Modifikation gilt, wodurch Nachbestellung verursacht . – Cerebrus
Ich bin nicht vertraut mit der betreffenden Klasse, aber vielleicht einen schnelleren Zugriff auf die am meisten zugegriffen Elemente zu ermöglichen? –
Sie können Details über LinkedHashMap unter http://java.sun.com/javase/6/docs/api/java/util/LinkedHashMap.html sehen. Es erklärt die Verwendung und wann es nützlich ist (LRU-Caches). –