游戏开发 C# list 解析

游戏开发 C# list 解析_第1张图片

 

构造函数:

游戏开发 C# list 解析_第2张图片

由此可见 List 用数组实现的

Add 方法:

游戏开发 C# list 解析_第3张图片

我们来继续看下EnsureCapacity 函数:

游戏开发 C# list 解析_第4张图片

Remove 方法: 

游戏开发 C# list 解析_第5张图片

 

游戏开发 C# list 解析_第6张图片

 

游戏开发 C# list 解析_第7张图片

游戏开发 C# list 解析_第8张图片

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

Insert 方法:

游戏开发 C# list 解析_第9张图片

 
Clear 和 Contains  方法:

游戏开发 C# list 解析_第10张图片

ToArray 方法:

游戏开发 C# list 解析_第11张图片

Sort 方法:

游戏开发 C# list 解析_第12张图片

 

游戏开发 C# list 解析_第13张图片

Array.Sort 排序算法:

游戏开发 C# list 解析_第14张图片

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

简单总结下:

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

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

 

 

你可能感兴趣的:(游戏开发,算法,java,开发语言)