List<T>
和 Dictionary<TKey,TValue>
都是泛型集合,但底层数据结构、使用场景、操作复杂度完全不同:✅ 一句话区别
-
List = 有序数组,按索引找元素,可重复。
-
Dictionary = 哈希表,按键找元素,键唯一,无序(插入顺序不保证)。
📊 横向对比表
特性 | List<T> | Dictionary<TKey,TValue> |
---|---|---|
底层结构 | 动态数组 | 哈希表(散列桶) |
访问方式 | 索引 list[i] |
键 dict[key] |
查找时间复杂度 | O(n)(线性) | O(1)(平均) |
是否允许重复 | ✅ 允许 | ❌ 键唯一,值可重复 |
是否有序 | ✅ 插入顺序保留 | ❌ 不保证顺序(.NET ≥ 5 有 OrderedDictionary ) |
典型操作 | 添加、遍历、按索引读写 | 快速查找、去重、映射 |
示例用途 | 存储一批学生成绩 | 学号 → 学生对象映射 |
🧪 代码对比
// List:按索引访问
List<string> list = new List<string> { "apple", "banana" };
string fruit = list[0]; // "apple"// Dictionary:按键访问
Dictionary<string, int> dict = new Dictionary<string, int>
{["apple"] = 3,["banana"] = 5
};
int count = dict["apple"]; // 3
🧠 记忆口诀
-
List 像排队,有编号,找人得挨个看。
-
Dictionary 像字典,有拼音索引,一查就到位。
⚠️ 注意
-
需要快速按键查找 → 用
Dictionary
-
需要保持插入顺序、允许重复 → 用
List
-
既要键唯一又要保留顺序 → 用
OrderedDictionary
或List<KeyValuePair<...>>
+ 手动维护