C# 之List底层源码解析

2022/5/4 20:13:29

本文主要是介绍C# 之List底层源码解析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

构造函数:

由此可见 List 用数组实现的

 

 

Add 方法:

 

 

 

 

我们来继续看下EnsureCapacity 函数:

 

 

Remove 方法: 

 

 

 

 

 

 

 

 Remove:使用Array.IndexOf ()  获取Item 的索引,然后用RemoveAt 来移除,RemoveAt里面用的是 Array.Copy 来拷贝数组,用新的数组覆盖原来的数组。时间复杂度为O(n)线性时间。

 

Insert 方法:

 

 
Clear 和 Contains  方法:

 

 

ToArray 方法:

 

Sort 方法:

 

 

 

 

Array.Sort 排序算法:

 

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

 

简单总结下:

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

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

 



这篇关于C# 之List底层源码解析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程