1:构造方法
1:内部用数组实现,new的时候没有给初始容量时_emptyArray,容量为0,如果传入容量
_items = new T[capacity]
2:Add接口
1:每次容量不够都会扩容一倍,默认为4,后面为8,16,32,64。。。
2:用数组实现,索引比较快
3:扩容的时候会产生垃圾
4:当元素为520时候,扩容到1024,浪费了很大空间
3:Remove接口
1:用Array.Copy进行覆盖
4:IndexOf 接口
1:时间复杂度为O(N)
5:Insert接口
1:与Add接口类似扩容机制
2:Array.Copy进行覆盖产生很多垃圾
6:Contains 接口
1:使用线性查找元素
7:ToArray接口
1:重新new一个数组,用Array.Copy实现
8:Find接口
1:线性查找,时间复杂度为O(n)
9:Sort接口
1:Array.Sort 使用的是快速排序方式进行排序,从而我们明白了 List 的 Sort 排序的效率为O(nlogn)
总结:
1: List 的效率并不高,只是通用性强而已,算法都使用的是线性复杂度的算法
2:当List里的元素不断增加时,会多次重新new数组,导致原来的数组被抛弃,产生GC
3:提前告知 List 对象最多会有多少元素在里面会减少Add带来的GC
参考链接:《Unity3D高级编程之进阶主程》第一章,C#要点技术(一) - List 底层源码剖析 - 技术人生
源码链接 :