当我说
时Dictionary<int,string>
它相当于两个不同的数组,例如:
int[] keys =new int[] { 1, 2, 3 };
string[] values=new string[]{"val1","val2","val3"};
答案 0 :(得分:5)
那不是太远了。查看Reflector中的源代码,似乎使用了三个内部集合:
private Entry<TKey, TValue>[] entries;
private KeyCollection<TKey, TValue> keys;
private ValueCollection<TKey, TValue> values;
请注意,还有一个int[] buckets
变量用于跟踪哈希代码冲突情况下所需的buckets。
这些变量的目的应该都是相当不言自明的。无论如何,这并不特别令人惊讶,因为Dictionary
类是已知的并且有记录可以提供(理想情况下,每个桶有一个项目)O(1)
查找时间。
答案 1 :(得分:3)
它是哈希表。对于每个键,Dictionary计算其哈希码,并将其用作指向值应驻留的位置的指针。如果有两个键匹配相同的哈希码,则这种情况称为冲突,在内部对于这种特殊情况,Dictionary使用二叉树。
Dictionary(哈希表)的算法复杂度是O(1),最坏的情况是O(log(N))(最坏的情况意味着我们只处理冲突),其中N是Dictionary中的一些元素。
答案 2 :(得分:2)
这一切都写在MSDN上:
Dictionary(Of TKey,TValue)泛型类提供从一组键到一组值的映射。字典的每个添加都包含一个值及其关联的键。通过使用其键来检索值非常快,接近于O(1),因为Dictionary(Of TKey,TValue)类被实现为哈希表。
答案 3 :(得分:1)
不,这是一个哈希表。好吧,这不是一个哈希表,但它确实非常密切相关。