C#集合性能总结

C#集合性能总结

一、引言

前面篇章我们讲解了很多的集合,如List<T>、Stack<T>、Queue<T>、HashSet<T>、SortedSet<T>、LinkedList<T>、Dictionary<Tkey,Tvalue>、SortedDictionary<Tkey,Tvalue>、SortedList<T>等

它们的结构和特点均不同,执行中的效率也有不同。本篇章着重讲解以上几种集合的效率。以便选择更高效的工具。

首先讲解一下几点衡量执行效率和时间的表述符:

1、O(1) //执行的时间和效率与数据项无关
例如ArrayList的函数Add();在不超过容量的情况下,无Add()函数的执行时间和前面的元素个数没关系。因为不需要重新分配内存。

2、O(log n) //执行的时间和效率与数据项多少成对数曲线关系
例如执行在集合中插入元素的时候就会使对数曲线的关系。

3、O(n) //执行的时间和效率与数据项多少成线性关系
如果ArrayList存储的元素超过了容量的话,再次添加就会超出,此时需要将原先的数组拷贝,然后重新分配容量更大的数组,最后将原先的数组复制到新数组中。此过程的耗时会随着数组元素的增加二增加,所以具有线性关系。

二、各种集合的效率对比

其中的n/a表示不支持这个方法。

集合 Add Insert Remove Item Sort Find
List<T> 如果集合重置大小就是O1/On On On O1 On/Ologn,最坏的情况是On^2
Stack<T> Push()如果栈重置大小就是O1/On n/a Pop,O1 n/a n/a n/a
Queue<T> Enqueue(),如果队列重置大小就是O1/On n/a Dequeue,O1 n/a n/a n/a
HashSet<T> 如果集重置大小就是O1/On Add,O1/On O1 n/a n/a n/a
SortedSet<T> 如果集重置大小就是O1/On Add,O1/On O1 n/a n/a n/a
LinkedList<T> AddLast,O1 AddAfter,O1 O1 n/a n/a On
Dictionary<Tkey,Tvalue> O1/On n/a O1 O1 n/a n/a
SortedDictionary<Tkey,Tvalue> Ologn n/a Ologn Ologn n/a n/a
SortedList<T> 无序数据为On,重置大小为On,到列表尾部Ologn n/a On 读写是Ologn,如果健在列表中就是Ologn,如果不在就是On n/a n/a
发布了50 篇原创文章 · 获赞 0 · 访问量 852

猜你喜欢

转载自blog.csdn.net/weixin_40786497/article/details/104171788
今日推荐