Dot-Net

List<T>.Remove(T) 或 List<T>.RemoveAt(int) 方法哪個更快?

  • March 15, 2019

List&lt;T&gt;.Remove(T)List&lt;T&gt;.RemoveAt(int).NET 集合中的方法快嗎?值類型或引用類型的速度是否不同?

List.Remove(T) 在其實現中使用 IndexOf 和 RemoveAt(int)。所以 List.RemoveAt(int) 更快。

public bool Remove(T item)
{
   int index = this.IndexOf(item);
   if (index &gt;= 0)
   {
       this.RemoveAt(index);
       return true;
   }
   return false;
}

簡單的回答:

一般來說,RemoveAt速度更快,但並不總是很大。

長答案:

讓我們先考慮找到合適的項目。該Remove方法必須在列表中搜尋與給定對象匹配的項目,因此O(n)通常是時間。RemoveAton 一個列表可以簡單地索引給定的項目,因此是O(1).

現在,從列表末尾刪除一個項目總是O(1)當然的,但通常刪除一個項目需要O(n)時間,因為需要進行重新洗牌(將刪除後的項目向前移動)。因此,在一般情況下,移除的總時間複雜度分別是O(n) + O(n)或者O(n) + O(1)對於 Remove 和 RemoveAt,因此O(n)在任何一種情況下都是簡單的。但是,RemoveAt可以保證至少同樣快,儘管縮放是相同的,除非您知道您正在/接近結束時將其刪除。

引用自:https://stackoverflow.com/questions/3211679