如何在内部维护词典?

use*_*276 10 c# dictionary

当我说

Dictionary<int,string>
Run Code Online (Sandbox Code Playgroud)

它是否相当于两个不同的数组,例如:

int[] keys =new int[] { 1, 2, 3 };
string[] values=new string[]{"val1","val2","val3"};
Run Code Online (Sandbox Code Playgroud)

Nol*_*rin 6

那不是太远了.查看Reflector中的源代码,似乎使用了三个内部集合:

private Entry<TKey, TValue>[] entries;
private KeyCollection<TKey, TValue> keys;
private ValueCollection<TKey, TValue> values;
Run Code Online (Sandbox Code Playgroud)

请注意,还有一个int[] buckets变量用于跟踪哈希码冲突情况下所需的存储桶.

这些变量的目的都应该是相当不言自明的.无论如何,这并不特别令人惊讶,因为Dictionary该类已知并有文档记录以提供(理想情况下,每桶一项)O(1)查找时间.