【发布时间】:2011-01-25 21:15:34
【问题描述】:
根据the MSDN documentation on the List<T>.Clear method:
这个方法是一个 O(n) 操作, 其中 n 是计数。
为什么是 O(n)?我问是因为我假设清除List<T> 可以简单地通过在内部分配一个新的T[] 数组来完成。没有其他类可以引用这个数组,所以我看不出这种方法的危害。
现在,也许这是一个愚蠢的问题...分配T[] 数组本身是O(n) 吗?出于某种原因,我不会这么认为;但也许是(我现在缺乏 C.S. 学位吗?)。如果是这样,我想这可以解释它,因为根据上面引用的相同文档,列表的容量保持不变,这意味着需要构造一个大小相等的数组。
(再说一次,这似乎不是正确的解释,因为文档应该说“n 是 Capacity”——不是 @ 987654327@*).
我只是怀疑这个方法不是分配一个新数组,而是将当前数组的所有元素清零;我很想知道为什么会这样。
*Hans Passant 在对LukeH's answer 的评论中指出文档是正确的。 Clear 只清零已在List<T> 中设置的元素;它不需要将所有元素“重新归零”。
【问题讨论】:
标签: .net list performance big-o