2013-09-27 65 views
15

我不知道爲什麼LinkedList沒有initialCapacity爲什麼LinkedList在java中沒有initialCapacity?

我知道什麼時候可以用ArrayListLinkedList

它很好的做法,確定集合最終大小,如:

List<String> arraylist = new ArrayList<String>(5); 

LinkedList例如:

List<String> linkedlist = new LinkedList<String>(); // right way 

List<String> arraylist = new LinkedList<String>(5); // compilation error 

有人能夠傳播關於該問題的光?

[編輯]

BTW,我可以寫

List<String> arraylist = new ArrayList<String>(5); 
List<String> linkedlist = new LinkedList<String>(arraylist); 
+2

回答你的*爲什麼downvote?*問題:[SO鼓勵一些先前的思考和搜索](http://stackoverflow.com/help/how-to-ask)之前問一個問題。互聯網上的數十億頁解釋了ArrayList和LinkedList之間的區別,並且給出了它們內部的知識,這很容易理解爲什麼沒有這種方法。在SO上提問只是意味着你還沒有試圖用谷歌做基礎研究。 –

+3

我可以打開文檔(我做過)並找出所需的一切。每個想要在上述問題中快速查找簡短描述(包含圖片)的人都會發現4-5個相當不錯的答案,而不是花時間掃描文檔。現在我們還有另外幾十頁的頁面。 SO不僅可以找到「獨奏」解決方案,而且有助於快速啓動。我今天寫了大約7種語言,我沒有時間掃描原始文檔。但是找到股票exp。來自其他程序員。 –

回答

28

LinkedList本質上沒有「容量」,因爲它在項目被添加到列表之前不會將內存分配給項目。 LinkedList中的每個項目都包含一個指向列表中下一個的指針。

http://www.stoimen.com/blog/wp-content/uploads/2012/06/0.-Arrays-vs.-linked-list.png

也就會預先分配存儲到列表中沒有意義的,因爲鏈表沒有能力

+0

已發佈圖片的「V」,謝謝 –

+0

所以我猜ArrayList是基於數組的DataStructure,因爲它接受初始的收集容量。 – Ajay

8

它的型號是不是基於陣列上,而是一個真正的鏈表,所以也沒有必要,進而會沒有道理。像空白數組項一樣的空鏈接沒有什麼意義。

2

爲什麼LinkedList有初始容量?

ArrayList由數組備份,所以初始容量是數組的初始大小。 LinkedList沒有這個需要。

2

爲什麼你需要一個LinkedList的容量? LinkedList不適用於固定大小的數組。每個LinkedListElement都有一個指向列表中下一個元素的指針(一個鏈接!)。由於這個原因,有可能在常量時間內將元素添加到鏈表中。但是,隨機訪問列表中的元素的成本很高。您需要遍歷列表中的所有元素,直到到達目的地。

1

鏈表不需要初始值。這是數組和鏈表之間的主要區別。

數組將在某處結束。但是鏈表不是。鏈接列表不適用於邊界值。

1

當你聲明一個數組時,你必須知道它的大小,因爲指針需要在內存中創建。鏈表不需要這樣做,因爲在將任何對象添加到列表之前,不需要指向內存的指針。

鏈表遞歸定義爲: 空列表 連接指向空列表

因此每次添加一個元素,你分配內存(或者更確切地說,在Java編譯器這一點)元素時您創建元素,然後當您將其添加到列表中時,它現在指向列表(或列表中指向它的最後一個元素)。

因此,您不需要聲明鏈接列表的初始大小,因爲鏈接列表始終以空列表開頭,並且當添加元素時它會指向列表。

相關問題