2009-10-21 3 views

ответ

5

Это не слишком далеко. Глядя на исходный код в отражатель, по-видимому, используются три внутренние коллекции:

private Entry<TKey, TValue>[] entries; 
private KeyCollection<TKey, TValue> keys; 
private ValueCollection<TKey, TValue> values; 

Обратите внимание, что существует также int[] buckets переменная отслеживать buckets требуется в случае коллизий хэш-кода.

Цели этих переменных должны быть достаточно понятными. Это неудивительно, так как класс Dictionary известен и документирован, чтобы обеспечить (в идеале, с одним элементом на каждый ковш) O(1) время поиска.

2

Это все ясно написано на MSDN:

Словарь (Of TKey, TValue) общий класс обеспечивает отображение из множества ключей к набору значений. Каждое дополнение к словарю состоит из значения и связанного с ним ключа. Получение значения с помощью его ключа очень быстро, близко к O (1), потому что класс Dictionary (Of TKey, TValue) реализован как хеш-таблица.

+0

Это все, конечно, конечно, но не совсем ответит на вопрос. Конечно, на самом деле это мало что касается внутренней реализации, а скорее о comp. сложность. – Noldorin

3

Это хэш-таблица. Для каждого словаря Словарь вычисляет хэш-код и использует его как указатель на место, где должно находиться значение. Если есть два ключа, соответствующие одному и тому же хэш-коду, такая ситуация называется столкновением и внутренне для этого специального случая. Словарь использует двоичное дерево.

Алгоритмическая сложность словаря (хеш-таблица) - это O (1), а в худшем случае O (log (N)) (наихудший случай означает, что мы имеем дело только с столкновениями), где N - это число элементов в словаре.

Смежные вопросы