List<T> 和 Dictionary<TKey,TValue> 都是泛型集合,但底层数据结构、使用场景、操作复杂度完全不同:✅ 一句话区别
-
List = 有序数组,按索引找元素,可重复。
-
Dictionary = 哈希表,按键找元素,键唯一,无序(插入顺序不保证)。
📊 横向对比表
表格
| 特性 | List<T> | Dictionary<TKey,TValue> |
|---|---|---|
| 底层结构 | 动态数组 | 哈希表(散列桶) |
| 访问方式 | 索引 list[i] |
键 dict[key] |
| 查找时间复杂度 | O(n)(线性) | O(1)(平均) |
| 是否允许重复 | ✅ 允许 | ❌ 键唯一,值可重复 |
| 是否有序 | ✅ 插入顺序保留 | ❌ 不保证顺序(.NET ≥ 5 有 OrderedDictionary) |
| 典型操作 | 添加、遍历、按索引读写 | 快速查找、去重、映射 |
| 示例用途 | 存储一批学生成绩 | 学号 → 学生对象映射 |
🧪 代码对比
csharp
// 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<...>>+ 手动维护
