回答
嘗試Dictionary
。
添加,缺失和查找是非常O(1)。我不確定「搜索的鍵/值比較」是什麼意思,但Dictionary
將鍵映射到值並具有快速搜索。
如果你真的需要一個列表(也就是在元素的順序),然後是SortedDictionary
將更好地爲您服務。
Dictionary<TKey, TValue>
通常是非常快的 - 攤銷O(1)插入和刪除。基本上它是O(1),除非它需要重構自己,在這一點上它是O(n)。
爲元素的「大量」的真正重要的插入和刪除?
鑑於Dictionary<TKey, TValue>
是在某些方面的標準:「我需要一個鍵/值映射」使用.NET數據結構,我至少基準它,看它是否在看之前執行不夠好爲您的需求更深奧的東西。
不過,從你的問題「清單」引用意味着你可能需要訂購,以及 - 是實際情況或沒有?即您是否需要能夠按照添加的順序迭代條目?如果是這樣,你可能需要創建自己的(Linked)List<T>
/Dictionary<TKey, TValue>
組成(適當謹慎)。
雖然SortedList<TKey, TValue>
和SortedDictionary<TKey, TValue>
做提供有保證的排序,它不是插入排序 - 這是關鍵排序。換句話說,如果你寫:
sortedDictionary["c"] = ...;
sortedDictionary["a"] = ...;
sortedDictionary["b"] = ...;
然後遍歷它,你會得到條目「a」,「b」,「c」的順序。
與你可能從他們的名字中想到的相反,這兩種類型都是真正的字典(因爲它們是鍵/值映射) - 它們只是以不同的性能特點實現。有關詳細信息,請參閱MSDN文檔。
SortedDictionary在我的研究中插入項目的速度也較慢。 – Pondidum 2009-12-07 10:35:53
@Pondidum:那麼它肯定比'字典
- 1. 火的時候收集改變(添加或刪除)的事件
- 2. 添加和刪除多餘的表格
- 3. 按鈕添加/刪除到收集欄
- 4. 添加/刪除行是動態表單中的選擇列表
- 5. 如何顯示是否添加或刪除了一個集合?
- 6. 在MySQL中逐行添加和多行添加速度最快的是什麼
- 7. 刪除最近添加的列
- 8. 從「添加或刪除規則集」中刪除規則集
- 9. jQuery添加和刪除多級列表中的類
- 10. 是否添加列刪除數據
- 11. 添加和刪除多個表單域
- 12. 級聯刪除性能:什麼是刪除一行多行最快的方法?
- 13. 更快地添加和刪除表上的類的方法?
- 14. 鏈接列表,值,添加和刪除
- 15. 是否可以從Subversion獲取添加或刪除的文件列表?
- 16. 添加/刪除列表
- 17. 這是清除內存塊(或SDL表面)的最快方法嗎?
- 18. 什麼是最快的方式來查找和刪除文件?
- 19. AS3添加和刪除對象,這是一個好主意嗎?
- 20. HTML-添加和刪除到收藏夾
- 21. 這是更快之間splitting/joing收集數組或迭代集合本身
- 22. 什麼是兩個排序列表交集的最快算法?
- 23. 從列表中刪除第一個項目的最快方法是什麼?
- 24. 動態刪除下拉列表,總是刪除最後一張
- 25. 卸載sql express這是不顯示在添加/刪除程序列表
- 26. 這是更快,序列化,ini或XML
- 27. 是否有列表中有添加和刪除事件的版本
- 28. 添加/刪除列表中的項目
- 29. 收集Java列表中唯一數據的最快方法
- 30. 多個線程添加和刪除項目到列表框
是否有任何理由,爲什麼你喜歡的非通用'Hashtable'到'字典'? –
LukeH
2009-12-07 10:19:53
是......它已經有一段時間,因爲我已經做了C#和我還沒有喝咖啡呢。編輯。謝謝。 – Thomas 2009-12-07 10:21:25
SortedDictionary可能*或可能不*是如果需要排序需要 - 請參閱我的答案。 – 2009-12-07 10:25:49