abe*_*nci 12 .net generics collections
.NET集合中的方法List<T>.Remove(T)或List<T>.RemoveAt(int)方法更快吗?值类型或引用类型的速度是否不同?
Nol*_*rin 23
简单回答:
一般来说,RemoveAt虽然并不总是很快,但速度更快.
答案很长:
我们先考虑先找到合适的项目.该Remove方法必须在列表中搜索与给定对象匹配的项目,因此O(n)通常是时间.RemoveAt在列表上可以简单地索引给定项目,因此O(1).
现在,从列表末尾删除项目O(1)当然总是如此,但通常删除项目需要花费O(n)时间,因为需要进行重新排列(在删除项目之后移动项目).因此,在一般情况下,移除的总时间复杂度分别为O(n) + O(n)或者O(n) + O(1)对于Remove和RemoveAt,因此O(n)在任何一种情况下都是如此.但是,RemoveAt保证至少同样快,尽管缩放是相同的,除非你知道你在最后/接近结束时删除它.
Dev*_*eam 18
List.Remove(T)在其实现中使用IndexOf和RemoveAt(int).所以List.RemoveAt(int)更快.
public bool Remove(T item)
{
int index = this.IndexOf(item);
if (index >= 0)
{
this.RemoveAt(index);
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6810 次 |
| 最近记录: |