2011-05-03 33 views
0

可能重複:
When should I use a List vs a LinkedList鏈表VS列表<T>

如果我希望不使用 的LinkedList在列表中使用通過索引訪問我的數據結構多少錢,我救? 如果我不能100%確定我將永遠不會使用按索引訪問,我想知道其中的差異。

假設我有N個實例。在LinkedList中插入和刪除將只是一個o(1)op,其中在List中它可能是O(n),但由於它已經優化,所以很高興知道n的某些值有什麼區別。 說N = 1,000,000和N = 1,000,000,000

+0

數據不足。請提供一些具體的細節。 – 2011-05-03 14:22:16

+0

@Mr。失望:現在失望了? :P(抱歉無法抗拒) – 2011-05-03 14:22:48

+0

LinkList不是一個通用集合,它是一個LinkList,List是一個簡單數組的通用版本。你的問題就像問一隻貓是否會喜歡吃狗食。 – 2011-05-03 14:24:36

回答

4

List<T>只是一個數組的封裝。 LinkedList<T>只有在訪問順序數據(向前或向後)時纔是最有效的。

鏈接列表提供非常快的插入或刪除列表成員。在鏈表的每個成員包含一個指向該列表中的下一個成員,以便在位置i插入的成員:

update the pointer in member i-1 to point to the new member 
set the pointer in the new member to point to member i 

檢查:When should I use a List vs a LinkedList

+0

+1000如果我可以花時間回答一個模糊的問題(用正確的答案)。 – 2011-05-03 14:31:08

+0

Ehhh,聲稱「List '是」僅僅是一個數組的封裝「是有問題的。首先,這不是完全正確的,具體的實施取決於集合的大小。其次,這是一個實施細節,不能保證永遠保持一致。在選擇使用'List '時,你不應該考慮這一點。關鍵是讓集合類使用最合適的算法來管理您的數據,然後您就可以繼續生活。如果您關心實現細節,那麼您已經在使用錯誤的框架。 – 2011-05-03 14:35:32

+0

@Cody:我必須同意下劃線實現邏輯。這取決於微軟。 – Priyank 2011-05-03 14:48:58

1

LinkedList<T>對於在列表中執行許多隨機插入和刪除項目很有用。否則,List<T>可能是最好的選擇,因爲它沒有鏈接列表中的元素(也可以被索引)的開銷。

但是,如果你關心性能,你真的需要測試你的實際代碼。