2011-07-05 32 views

回答

3

除了在某些特定情況下(如嵌入式系統),您可能正在使用分層和/或虛擬內存系統。

儘管操作系統或硬件已充分提取了其實現細節,以便它對您而言是透明的,但仍有一些重要考慮因素。

基於數組的實現將在元素之間表現出比獨立鏈接元素更高程度的空間局部性。

http://en.wikipedia.org/wiki/Locality_of_reference

在計算機科學中, 參考,也被稱爲局部性原理 局部性,是 相同的值或相關存儲 位置被頻繁訪問的現象。 參考文獻 有兩種基本類型。時間地點是指在相對較短的時間內使用特定數據和/或 資源的 持續時間。空間局部性是指使用 內的數據元素的相對接近的存儲位置。當數據以線性方式排列和訪問 ,例如遍歷一維數組中的元素時,發生順序局部性,空間局部性的特例。

局部性僅僅是 計算機系統中發生的一種可預測的行爲。其中 表現出的參考 強大的本地系統是不錯的人選性能 通過使用 技術優化,如緩存和 指令預取技術 內存,或像在 處理器的流水線先進分支預測 。

基於此,所有其他的事情都是平等的,我會選擇ArrayList over LinkedList。

+0

這是一個非常有趣的觀點 –

3

我認爲你的問題在某種程度上會自我回答:如果選擇哪一個並不重要,那麼選擇哪一個並不重要;如果它確實很重要,那麼選擇最好的一個。

這是溫和的舌頭,但在沒有細節的情況下,這就是選擇的結果。

如果有幫助,對Java Collections Tutorial似乎建議ArrayList作爲通用列表實現當沒有任何相關標準:

在每種情況下,一個實現 - HashSetArrayListHashMap - 顯然是大多數應用程序使用的,其他所有的東西都是平等的。

當然,我見過的第三方代碼(以及我寫的第一方代碼)也採用了這個原則。

0

如果數據是靜態的,而您只是在查找,請使用數組。如果你使用ArrayList,你會有一些初始化時間,而LinkedList將有較慢的查找+初始化。

0

LinkedList其實很漂亮,我只會將它用於只需要順序訪問的大型動態列表。

如果您的列表很小或需要隨機訪問或沒有多少插入和刪除,請使用ArrayList。

1

從你的問題,這聽起來像你正在做的是迭代通過列表(沒有增加,沒有刪除,沒有隨機查找)。因此,這兩個實現之間應該沒有太大的區別(如您所注意的)。

我能想到的唯一的事情就是創造空間和物體。 ArrayList需要更少的內存來存儲它的數據(數組vs節點:data + next + prev)。因此,我的默認選項是使用ArrayList。

+0

這是我正在尋找的內容:內存差異。謝謝。 –

+1

@farm鴕鳥:如果您想節省更多空間,請使用所需的正確尺寸初始化列表。 –

0

A LinkedList將爲鏈接引用增加內存開銷。我不認爲ArrayList和數組之間沒有太大的區別,如果你使用構造函數來設置ArrayList的初始容量,所以我傾向於使用ArrayList,只要我沒有看到明顯的優勢。它的情況,雖然...例如,如果我使用可變參數輸入我可能會保留所有數據爲簡單起見。

相關問題