目前我使用的是List<short>
作爲緩衝來裝東西了一段時間,而計算是基於其他值進一步下跌的緩衝,以每個值進行。然後我意識到,這可能不是非常有效,因爲我被告知List<>
是一個鏈表,所以每次我做whatever = myList[100];
時,可憐的東西首先跳下所有其他節點,以達到我想要的值。我不想使用常規數組,因爲我在代碼中的其他地方加載了Add()
和Remove()
。所以我需要一個繼承IList<T>
的類,但使用常規數組數據結構。有沒有人知道.net中的一個類以這種方式工作,所以我不必寫我自己的?我嘗試使用ArrayList,但它不是通用的!列表數據結構C#效率
回答
不,List<T>
是一個通用的集合,而不是鏈接列表。如果你需要添加和刪除功能,那麼List<T>
是大多數人默認使用的實現。
好的,謝謝我的想法,一個List <>是一個鏈表是錯誤的:( – 2010-07-11 16:24:01
如果多數民衆贊成的情況下是沒有任何理由的使用規則陣列在名單? – 2010-07-11 16:26:03
爲了簡單,當你只處理一個固定?數量及對象的集合 – thecoop 2010-07-11 17:07:35
List<T>
不使用鏈表實現。它在內部使用一個數組,所以它看起來正是你所需要的。請注意,因爲它是一個數組,刪除/插入可能是一個昂貴的操作,具體取決於列表的大小以及要刪除/插入的位置項 - O(n)。儘管不知道如何使用它,但很難推薦更好的數據結構。
從docs的備註部分引用。
List(T)類是ArrayList類的通用等價物。它使用大小根據需要動態增加的數組實現IList(T)泛型接口。
List<T>
由數組,而不是一個鏈表支持。索引訪問的List<T>
發生在不變的時間。
除了tvanfosson的正確答案,如果您不確定內部是如何工作的,只需加載.NET Reflector,您就可以看到如何實施。在這種情況下,向下鑽取到的List<T>
索引向我們展示了下面的代碼:
public T this[int index]
{
get
{
if (index >= this._size)
{
ThrowHelper.ThrowArgumentOutOfRangeException();
}
return this._items[index];
}
// ...
在這裏你可以看到this._items[index]
是通用型T
的數組。
因爲Reflector不再免費,所以[ILSpy](http://ilspy.net/)和[DotPeek](http://www.jetbrains.com/decompiler/)是其他免費選擇。 – 2013-05-23 19:07:14
- 1. python:列表和字典之間的數據結構效率
- 2. 效率:使用什麼數據結構...?
- 3. 數據庫效率/結構問題
- 4. 高效的列表數據結構
- 5. 效率與結構
- 6. 自動有效或遞歸數據結構列表的列表
- 7. MySQL表結構和設計效率
- 8. 函數式編程:一成不變的數據結構效率
- 9. Armadillo C++: - 高效訪問多維數據集結構中的列
- 10. 高效的數據結構
- 11. 高效的數據結構
- 12. 高效的數據結構
- 13. C數據結構
- 14. 關於高效頻率計算的數據結構決策
- 15. 對R數據結構的操作效率
- 16. 與數據結構網絡堆等效功率和映射
- 17. 一個有效的排序列表數據結構
- 18. 數據結構:循環隊列(在C)
- 19. 數據結構的C++序列化
- 20. C#陣列或其他數據結構
- 21. 對稱陣列數據結構C++
- 22. Drupal數據庫結構 - 高效/低效?
- 23. C - 結構和列表
- 24. C#結構化列表
- 25. 結構和列表C
- 26. C端結構列表
- 27. 覆蓋率在數據結構
- 28. C++通用表數據結構
- 29. c代表堆的數據結構
- 30. 數據表結構
老實說,我認爲你不會過分強調效率。你得到的任何收益都將幾乎不明顯 – lomaxx 2010-07-11 16:21:26
'List <>'不是鏈表。 'LinkedList <>'然而。你可能已經注意到了,因爲在鏈表中公開隨機訪問是沒有意義的。 – Dykam 2010-07-11 16:24:49
對列表進行索引訪問是O(1)操作。 – digEmAll 2010-07-11 16:26:28