C#列表的速度
回答
List<T>
使用的背衬数组来保存项目:
- 索引器访问(即取/更新)为O(1)
- 从尾部删除是O(1)
- 从别处需要删除现有的项目需要向上移动,所以O(n)有效
- 除非需要调整大小,否则它是O(n)。 (这使缓冲区大小加倍,所以分摊成本为O(1)。)
- 添加到其他位置需要将现有项目向下移位,因此O(n)有效
- 查找项目是O(n ),除非它被分类,在这种情况下二分搜索给出了O(log n)
通常很好地使用列表相当广泛。如果在开始填充列表时知道最终大小,最好使用允许指定容量的构造函数,以避免调整大小。除此之外:如果你担心,打破探查器...
Brian修复了它 - 谢谢Brian :) – 2009-09-16 14:33:12
“添加到结尾”甚至累积了O(1) – 2009-09-16 14:58:24
的费用@Thomas:是的,我会提到这一点。 – 2009-09-16 15:16:23
比较什么?
- 如果你的意思是
List<T>
,那么这本质上是一个数组的包装;如此快速的索引读/写,相对快速追加(因为它允许额外的空间,在必要时大小增加一倍),并从最后删除,但更昂贵的做其他操作(插入/删除除的端部) - 阵列再次是快速通过索引,但固定的大小(无附加/删除)
Dictionary<,>
等提供由密钥
列表本质上不是慢更好的访问;特别是如果你知道你总是需要查看所有数据,或者可以通过索引访问它。但对于大型列表来说,通过密钥进行搜索可能会更好(也更方便)。 .NET中有各种各样的字典实现,每种字典都具有不同的大小/性能成本。
- 1. C#Lambda表达速度
- 2. 速度foreach排序列表
- 3. 速度相比于列表
- 4. 平均速度,btree或散列表的速度是多少?
- 5. C#serialPort速度
- 6. C++ 3D角速度
- 7. 秒表运行速度慢(C++)
- 8. C#正则表达式速度问题
- 9. C++正则表达式速度优化
- 10. 链接列表在C快速排列
- 11. 车速表最高速度
- 12. C++ glut glew的速度?
- 13. C#上Ebay API的速度#
- 14. Liferay 6.1速度动态数据列表
- 15. Matlab位置列表到速度矢量
- 16. 当表格列相同时,EXCHPT执行的速度是否比JOIN速度快
- 17. c#中有类库的距离,速度,加速度等吗?
- 18. Python列表()vs列表理解构建速度
- 19. 在C#中快速查找子列表
- 20. 计算在python速度和加速度为大numpy的阵列
- 21. 阵列“CoreLocation”的平均速度和最高速度
- 22. C++ if语句速度
- 23. c#Parallel.Invoke(零速度改进)
- 24. 计算角加速度c#
- 25. C++构造函数(速度)
- 26. C#中System.IO.Packaging速度问题
- 27. C#WebClient上传速度
- 28. Linux C USB写入速度
- 29. C++/SDL动画速度
- 30. C#Antlr4最大速度
这实际上取决于你想要对他们做什么。 – LukeH 2009-09-16 14:28:35
“快”和“慢”是无关紧要的。相关的“对我的客户足够快”和“对我的客户来说太慢”。你的第一个问题应该是“列表速度够快吗?”你是唯一知道你的客户是谁以及他们的性能要求是什么的人,所以只有你*能够回答这个问题。您将通过尝试一些有意义的基准并将它们与您仔细陈述的以客户为中心的实际目标进行比较来回答。 – 2009-09-16 14:45:44