Есть ли реальная практическая разница между а SortedList<TKey,TValue>
и а SortedDictionary<TKey,TValue>
? Есть ли какие-то обстоятельства, когда вы бы специально использовали один, а не другой?
c#
.net
generics
sortedlist
sorteddictionary
Шауль Бер
источник
источник
SortedList<TKey,TValue>
а не одинSortedList<T>
? Почему это не реализуетсяIList<T>
?Ответы:
Да, их эксплуатационные характеристики существенно различаются. Вероятно, было бы лучше назвать их,
SortedList
и,SortedTree
поскольку это отражает реализацию более тесно.Посмотрите документы MSDN для каждого из них (
SortedList
,SortedDictionary
), чтобы узнать подробности производительности для различных операций в разных ситуациях. Вот хорошее резюме (изSortedDictionary
документов):(
SortedList
фактически поддерживает отсортированный массив, а не использует дерево. Он все еще использует бинарный поиск для поиска элементов.)источник
Вот табличное представление, если это помогает ...
С точки зрения производительности :
С точки зрения реализации :
Чтобы примерно парафраз, если вам требуется сырец производительность
SortedDictionary
может быть лучшим выбором. Если вам требуется меньшая нагрузка на память и индексированный поиск, то этоSortedList
лучше. Смотрите этот вопрос для получения дополнительной информации о том, когда использовать который.Вы можете прочитать больше здесь , здесь , здесь , здесь и здесь .
источник
BDictionary<Key,Value>
LoycCore вместоSortedDictionary
.BDictionary
это обычно медленнее, чемSortedDictionary
за исключением очень больших размеров, но это быстрее, чемSortedList
если есть более 700 предметов или около того. Использование памяти должно быть только немного выше, чемSortedList
(намного ниже, чемSortedDictionary
), из-за использования массивов в листьях дерева.Я взломал Reflector, чтобы взглянуть на это, так как кажется, что это немного путаница
SortedList
. На самом деле это не двоичное дерево поиска, это отсортированный (по ключу) массив пар ключ-значение . Существует такжеTKey[] keys
переменная, которая сортируется синхронно с парами ключ-значение и используется для двоичного поиска.Вот некоторый источник (нацеленный на .NET 4.5) для резервного копирования моих утверждений.
Частные участники
SortedList.ctor (IDictionary, IComparer)
SortedList.Add (TKey, TValue): void
SortedList.RemoveAt (int): void
источник
Проверьте страницу MSDN для SortedList :
Из раздела «Замечания»:
источник
Это визуальное представление о том, как спектакли сравниваются друг с другом.
источник
Уже достаточно сказано по этой теме, однако, чтобы было проще, вот мое мнение.
Сортированный словарь должен использоваться, когда
С другой стороны, отсортированный список следует использовать, когда
Надеюсь это поможет!!
источник
Индексный доступ (упомянутый здесь) - это практическая разница. Если вам нужен доступ к преемнику или предшественнику, вам нужен SortedList. SortedDictionary не может этого сделать, поэтому вы довольно ограничены тем, как вы можете использовать сортировку (first / foreach).
источник