C#列表的速度(Speed of C# lists)

2019-07-18 05:09发布

是C#列表快? 什么是使用列表来处理对象的好坏两面?

广泛使用清单将使软件慢? 什么是C#的替代品清单?

多少对象是“太多的对象”的名单?

Answer 1:

List<T>使用的背衬数组来保存项目:

  • 索引器访问(即取/更新)为O(1)
  • 从尾部删除是O(1)
  • 从其它地方需要现有的项目删除到被移位了,所以O(n)的有效
  • 添加到端是O(1),除非它需要调整大小,在这种情况下,它为O(n)。 (这加倍缓冲器的大小,因此摊销成本是O(1)。)
  • 添加到别处要求对现有项目下移,所以O(n)的有效
  • 找到一个项目是O(n),除非它的排序,在这种情况下,二进制搜索给出了O(log n)的

这是通常会比较好用名单相当广泛。 如果你知道最后的大小,当你开始填充一个列表,它的使用,它可以让你指定容量,避免调整构造一个好主意。 除此之外:如果您担心,打出来的分析器...



Answer 2:

相比呢?

  • 如果你的意思List<T>那么这基本上是围绕阵列的包装器; 这么快读通过址/写, 比较快的追加(因为它允许额外的空间末,规模在必要时增加一倍),并从最终删除,但价格较贵进行其他操作(插入/删除除结尾以外)
  • 阵列再次是快速通过索引,但固定的大小(无附加/删除)
  • Dictionary<,>等提供由密钥更好的访问

列表本质上不是慢; 特别是如果你知道你总是需要看所有的数据,或者可以通过索引来访问它。 但是,对于大型列表可能会更好(更方便),通过一键搜索。 有各种字典实现在.NET,每个具有不同的成本重新大小/性能。



文章来源: Speed of C# lists
标签: c# oop