List
官方源码地址:https://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs
关键点
- 继承了
IList,IReadOnlyList
接口 - 底层使用数据结构为泛型数组,基于数组结构,所以不适合频繁的删除,插入,操作。
Count
表示数据长度,Capacity
表示数组长度大小。- 添加数据动态扩容:
- 默认容量为0
- 容量不足时,首次扩容到4,后续扩容至原来的2倍
- 排序算法使用的快排,效率:O(nlogn)
- 查找使用线性查找,效率:O(n)
- 线程不安全的,并没有对多线程下做任何锁或其他同步操作
优点
相比ArrayList,在初始化时需要指定泛型类型,避免装箱拆箱操作。通用性比较强。
缺点
内存分配方式不合理,当多次添加数据时,每次扩容都会造成空间浪费,增大GC压力。所以在使用时指定一个合适的容量较少扩容操作。
结论
List 是一个兼容性比较好的组件,但 List 在效率方面并没有做优化,线程也并不安全,需要加锁机制来保证线程的安全性。