C#泛型集合深度解析(九):掌握System.Collections.Generic的核心精髓
一、泛型集合革命:告别装箱拆箱的性能噩梦
1.1 泛型与非泛型集合性能对比
// 非泛型集合(ArrayList)
ArrayList arrayList = new ArrayList();
arrayList.Add(100); // 装箱发生
int value = (int)arrayList[0]; // 拆箱发生// 泛型集合(List<T>)
List<int> intList = new List<int>();
intList.Add(100); // 无类型转换
int val = intList[0]; // 直接访问
性能基准测试(100万次操作):
操作 | ArrayList | List<T> | 性能提升 |
---|---|---|---|
添加元素 | 120ms | 35ms | 3.4倍 |
读取元素 | 95ms | 12ms | 7.9倍 |
内存占用 | 48MB | 32MB | 33%优化 |
二、核心集合类型全景解析
2.1 List<T>:动态数组之王
内部实现原理:
public class List<T>
{private T[] _items; // 底层数组private int _size; // 实际元素数量private int _version; // 修改版本号
}
容量增长策略:
-
初始容量:0或4(根据构造函数)
-
扩容规则:当容量不足时,双倍扩容(2x)
-
最佳实践:预初始化容量减少扩容次数
List<int> bigList = new List<int>(10000); // 预分配
2.2 Dictionary<TKey, TValue>:哈希表的艺术
哈希碰撞解决方案:
-
开放寻址法(.NET实现)
-
分离链表法(Java实现)
典型操作时间复杂度:
操作 | <
---|