c#之List总结(面试可能会问哦)

1.首先明确List的底层是用数组实现的,并且可以动态扩容,默认容量大小为4。每次增加一个元素的数据,Add接口都会首先检查的是容量还够不够。每次容量不够的时候,整个数组的容量都会扩充一倍,_defaultCapacity 是容量的默认值为4。因此整个扩充的路线为4,8,16,32,64,128,256,512,1024…依次类推。

List使用数组形式作为底层数据结构,好处是使用索引方式提取元素很快,但在扩容的时候就会很糟糕,每次new数组都会造成内存垃圾,这给垃圾回收GC带来了很多负担。

2.List在Add,Remove的时候都是采用数组的拷贝,用Array.Copy对原先的数组进行覆盖

3.Enumerator 每次都是被new出来,如果大量使用迭代器的话,比如foreach就会造成大量的垃圾对象,尽量不要用foreach,因为 List 的 foreach 会增加有新的 Enumerator 实例,最后由GC垃圾回收掉。

4.List.Sort,采用的快速排序方式

5.List的内存分配方式不合理,当List里的元素增加时,会重新new数组,原来的数组被无情地抛弃,会给垃圾回收造成压力,优化的方式就是提前定义好List的容量大小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值