Dot-Net
List<T>.Remove(T) 或 List<T>.RemoveAt(int) 方法哪個更快?
List<T>.Remove(T)比List<T>.RemoveAt(int).NET 集合中的方法快嗎?值類型或引用類型的速度是否不同?
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; }
簡單的回答:
一般來說,
RemoveAt速度更快,但並不總是很大。長答案:
讓我們先考慮找到合適的項目。該
Remove方法必須在列表中搜尋與給定對象匹配的項目,因此O(n)通常是時間。RemoveAton 一個列表可以簡單地索引給定的項目,因此是O(1).現在,從列表末尾刪除一個項目總是
O(1)當然的,但通常刪除一個項目需要O(n)時間,因為需要進行重新洗牌(將刪除後的項目向前移動)。因此,在一般情況下,移除的總時間複雜度分別是O(n) + O(n)或者O(n) + O(1)對於 Remove 和 RemoveAt,因此O(n)在任何一種情況下都是簡單的。但是,RemoveAt可以保證至少同樣快,儘管縮放是相同的,除非您知道您正在/接近結束時將其刪除。