Разница между коллекциями

Рейтинг: 0Ответов: 1Опубликовано: 13.03.2015

Товарищи, нужно просветление!

Есть 3 коллекции типа словаря. Это Dictionary <Key, Value>, SortedDictionary <Key, Value>, SortedList<TKey, TValue>. Разницу между последними 2-мя я вообще не понял. Но еще не разберусь, каким образом хранятся и сортируются элементы в Dictionary <Key, Value> написано, что сортировка элементов в данной коллекции идет по хешу ключа. Однако почему-то в этом коде элементы выводятся в той последовательности, в которой я их ввел:

static void Main()
    {
        Dictionary<string, int> dict = new Dictionary<string, int>();
        dict.Add("Gleb", 2);
        dict.Add("Pavel", 6);
        dict.Add("Anna", 4);
        dict.Add("Sergey", 3);
        foreach (var v in dict.Keys)
        {
            Console.WriteLine(v);
        }
    }

Ведь, по идее, они должны быть в псевдослучайном порядке. Почему тогда так происходит? И какая разница между SortedDictionary <Key, Value> и SortedList<TKey, TValue>?

alt text

Ответы

▲ 1Принят
  1. При итерации по Dictionary<TKey, TValue> элементы возвращаются в том порядке, в котором были добавлены по той причине, что внутри себя Dictionary содержит список List<KeyValuePair<TKey, TValue>> (говорю очень грубо и с допущениями). Этот список и возвращается, когда вы юзаете foreach.

Касательно второго вопроса:

  1. SortedList<TKey, TValue> использует меньше памяти, чем SortedDictionary<TKey, TValue>.
  2. В SortedDictionary<TKey, TValue> быстрее вставлять и удалять неупорядоченные данные
  3. Если список заполнять отсортированными данными, то SortedList <TKey, TValue> быстрее, чем SortedDictionary <TKey, TValue>.