簡體   English   中英

清單執行 <T> 在C#中?

[英]Implementation of List<T> in C#?

首先,我為我的英語不好對不起,然后是我的問題。

我知道這里有很多這樣的問題,但是我沒有找到直接的答案。 List<T>是否使用某種“鏈接列表”機制實現? 還是只是過度設計的陣列?

我對列表的性能問題感興趣,例如排序,插入和刪除項目。 例如,對於插入操作,“鏈表”僅定義了一些新連接,但是數組需要改變其值。 清單呢?

是的,List <>是一個數組。 是的,Insert()是O(n)操作。

以這種方式工作很重要,現代處理器非常依賴其緩存。 您計算機中的RAM 非常慢,比處理器慢得多。 高速緩存可以快速順序訪問內存。 這與LinkedList <>的作用相反。 單個高速緩存未命中會花費數百個cpu周期。 請注意LinkedList <>的另一個明顯的缺點,除非可以順序索引,否則對其進行索引將花費O(n)。 List始終為O(1)。

這些只是粗略的准則,沒有人可以建議您用LinkedList替換List。 只有探查器可以做到這一點。

我會說這只是一個過度設計的數組。 對於鏈接列表,您需要LinkedList<T> 有關LinkedList<T>更多信息,請閱讀此內容

我認為List<T>是一個過度設計的數組,而不是“鏈接列表”。

至於性能,由於List<T>並不是固有排序的,因此性能取決於排序算法(氣泡排序非常慢,因為每個項目都需要檢查)。

List<T>插入和刪除項目非常簡單,並且可以使用List<T>.Add()List<T>.Insert()來提高插入項目的性能,因為.Add()會添加它到列表的末尾。

有關各種.NET集合類型的性能和一般用例的詳盡處理,請閱讀C#/。NET基礎知識:選擇正確的集合類

不,列表不是鏈接列表,它只是一個方便的強類型數組。 我不會將其稱為工程陣列,而是C#2.0引入的最佳功能之一。 如果需要考慮使用通用列表的性能,則可以根據用例對其進行優化,但是即使在龐大的列表中,插入也不會花費很多時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM