C#列表的速度

时间:2009-09-16 14:25:47

标签: c# oop

C#列表是否快速?使用列表处理对象有什么好处和坏处?

广泛使用列表会使软件变慢吗? C#中列表的替代方法是什么?

列表的“太多对象”有多少个对象?

2 个答案:

答案 0 :(得分:79)

List<T>使用支持数组来保存项目:

  • 索引器访问(即获取/更新)是O(1)
  • 从尾部移除是O(1)
  • 从其他地方删除要求现有项目向上移动,因此O(n)有效
  • 添加到结尾是O(1),除非它需要调整大小,在这种情况下它是O(n)。 (这是缓冲区大小的两倍,因此摊销成本为O(1)。)
  • 添加到其他地方需要将现有项目向下移动,因此O(n)有效
  • 找到一个项目是O(n),除非它已经排序,在这种情况下二进制搜索给出O(log n)

通常可以很好地使用列表。如果在开始填充列表时知道最终大小,最好使用构造函数来指定容量,以避免调整大小。除此之外:如果您担心,请打开探查器......

答案 1 :(得分:12)

与什么相比?

  • 如果你的意思是List<T>,那么它本质上是一个数组的包装器;如此快速地通过索引读取/写入,相对快速追加(因为它允许最后的额外空间,必要时大小加倍)并从最后删除,但执行其他操作更昂贵(插入/删除除结尾之外)
  • 数组再次按索引快速,但是固定大小(无追加/删除)
  • Dictionary<,>等可通过密钥提供更好的访问权限

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