在 C# 中,List 和 Dictionary 是两种常用的泛型集合,它们在存储方式、访问方式以及适用场景上有显著区别。
1. List
List
特点
- 存储方式:按照插入顺序存储元素,基于索引访问。
- 访问方式:通过整数索引快速访问元素。
- 性能:适合基于索引的快速读取,但对插入和删除操作的性能取决于操作的位置(尤其在列表中间插入或删除需要移动元素)。
- 重复性:允许存储重复的元素。
适用场景
- 数据需要按照插入顺序存储和访问。
- 不需要快速查找,而是经常基于索引操作(如排序、遍历)。
- 需要处理重复的数据。
示例代码
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List numbers = new List { 1, 2, 3, 4, 5 };
numbers.Add(6); // 添加元素
numbers.Remove(3); // 删除元素
Console.WriteLine("List 内容: " + string.Join(", ", numbers));
}
}
2. Dictionary
Dictionary
特点
- 存储方式:按键值对存储,每个键必须唯一,但值可以重复。
- 访问方式:通过键快速查找对应的值。
- 性能:对键的查找、添加和删除操作性能较高,平均时间复杂度接近 O(1)。
- 键的唯一性:键不能重复,如果尝试添加重复的键,会引发异常。
适用场景
- 数据具有唯一标识符(如 ID、键等)。
- 需要快速通过键查找对应的值。
- 数据不需要按插入顺序访问。
示例代码
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
Dictionary students = new Dictionary
{
{ 1, "Alice" },
{ 2, "Bob" },
{ 3, "Charlie" }
};
students[4] = "David"; // 添加新的键值对
students.Remove(2); // 移除键为 2 的元素
foreach (var kv in students)
{
Console.WriteLine($"Key: {kv.Key}, Value: {kv.Value}");
}
}
}
区别总结
特性 | List | Dictionary |
存储方式 | 按插入顺序存储 | 键值对存储,键唯一 |
访问方式 | 通过索引访问 | 通过键快速查找值 |
性能 | 基于索引访问快,插入/删除慢 | 插入、查找、删除操作性能高 |
键值关系 | 无键值关系,只存储值 | 必须有键,键不能重复 |
适用场景 | 适用于按顺序处理的一组数据 | 适用于具有键值映射的数据 |
选择依据
- 按顺序存储和处理数据:选择 List
。 - 需要通过键快速查找数据:选择 Dictionary
。 - 是否需要唯一标识符:Dictionary 提供键值关系更适合此需求。