LinkedHashMap в .NET - PullRequest
       36

LinkedHashMap в .NET

16 голосов
/ 28 января 2009

Интересно, есть ли аналог. java.util.LinkedHashMap в .NET? (т.е. элементы упорядочиваются автоматически, если я получаю доступ к элементу. (логический accessOrder)).

Ответы [ 5 ]

11 голосов
/ 28 января 2009

Просто для пояснения читателям: LinkedHashMap ведет себя таким образом только при сборке с одной конкретной перегрузкой конструктора. Обычно элементы поддерживаются в порядке вставки. (Мне это немного странно, но не берите в голову.)

Я не верю, что в .NET есть такой класс. Построить его будет несложно, используя связанный список элементов и словарь от ключа к узлу связанного списка. В этом случае доступ будет состоять из выборки связанного узла списка, перемещения его в заголовок и возврата значения.

Я был бы рад реализовать это сегодня или завтра, если хотите, - хотя, возможно, не с полным модульным тестированием и т. Д. (Полное тестирование коллекции - дело длительное!)

5 голосов
/ 28 января 2009

Немного Googling, кажется, показывает, что нет никакого встроенного эквивалента C # для LinkedHashMap, но есть некоторые доступные сторонние опции.

2 голосов
/ 05 июня 2009

Вот реализация C #, которую я нашел на форуме :

Это недокументировано, но есть некоторые тесты. Это не является общим, однако. По крайней мере, это то, что я думаю.

@ Jon: Я тоже был бы признателен, если бы вы могли сделать быструю реализацию. Я предполагал, что словарь наверху LinkedList будет лучше, но я слышу есть проблемы со сборкой мусора с LinkedList, который замедляет работу.

1 голос
/ 09 мая 2014

Я использовал System.Collections.Specialized.OrderedDictionary в качестве замены LinkedHashMap. Это сработало для меня. Есть ли что-то, что мне не хватает в OrderedDictionary (да, он не универсальный, но доступен в .Net 2 или новее)?

0 голосов
/ 07 апреля 2016

Nhibernate имеет реализацию NHibernate.Util.LinkedHashMap.

Если он уже есть в вашем коде, как у меня, это может быть полезно

...