源码链接:C#字典源码
主要结构如下:
private struct Entry {
public int hashCode; // Lower 31 bits of hash code, -1 if unused
public int next; // Index of next entry, -1 if last
public TKey key; // Key of entry
public TValue value; // Value of entry
}
private int[] buckets; //哈希桶 数组
private Entry[] entries; //实体 数组
private int count;
...
private IEqualityComparer<TKey> comparer;
private KeyCollection keys;
private ValueCollection values;
字典内部是通过两个数组存储,一个是哈希桶用于解决哈希冲突(拉链法),存储的是每个链表的头结点Entry下标。一个是Entry数组,内部形成一个链表,存储每一个数据实体。
原理和处理问题是:每个Hash值对应一个索引,就需要声明一个超级大容量的数组,而且两个不同的key生成的哈希值也有可能相同,这就会产生Hash碰撞。前者用哈希桶,将Hash值分类装到一个个桶里,