游戏开发 C# list 解析_开发语言


构造函数:

游戏开发 C# list 解析_算法_02

由此可见 List 用数组实现的

Add 方法:

游戏开发 C# list 解析_时间复杂度_03

我们来继续看下EnsureCapacity 函数:

游戏开发 C# list 解析_开发语言_04

Remove 方法: 

游戏开发 C# list 解析_java_05

 

游戏开发 C# list 解析_开发语言_06

 

游戏开发 C# list 解析_时间复杂度_07

游戏开发 C# list 解析_List_08

 Remove:使用Array.IndexOf ()  获取Item 的索引,然后用RemoveAt 来移除,RemoveAt里面用的是 Array.Copy 来拷贝数组,从index处之后的元素往前移一位。时间复杂度为O(n)线性时间。

Insert 方法:

游戏开发 C# list 解析_java_09

 
Clear 和 Contains  方法:

游戏开发 C# list 解析_java_10

ToArray 方法:

游戏开发 C# list 解析_算法_11

Sort 方法:

游戏开发 C# list 解析_开发语言_12

 

游戏开发 C# list 解析_List_13

Array.Sort 排序算法:

游戏开发 C# list 解析_算法_14

 时间复杂度为O(n logn)快速排序

简单总结下:

List 源码用数组实现的,常用接口的时间复杂度为线性时间,多次元素增加,扩容方式为2的指数,如果元素数量有65个,则扩容(64*2)128,造成大量的内存空间的浪费。

没有对多线程做任何的加锁安全处理,无法处理并发情况下_size++ 的执行顺序,因此在多线程使用的时候 要进行加锁等安全处理操作。List 兼容性强,但效率并不高。