2012-11-26 63 views
2

我讀的Java的LinkedList的源代碼,並注意的LinkedList構造是這樣的:將爲Java LinkedList分配多少空間?

public LinkedList() { 
    header.next = header.previous = header; 
} 

多少空間將被分配到該初始化,頭部似乎被指向創建無限遞歸本身。

回答

4

它在header實例變量的初始化分配的單個節點:

private transient Entry<E> header = new Entry<E>(null, null, null); 

在構造函數中的代碼,以你指分配沒有記憶;它只是設置指向初始狀態的指針。沒有「無限遞歸」,因爲內部遍歷迎合了這種情況。

+0

謝謝波希米亞人,我想我明白你的意思,存儲是靜態的,遍歷是一種操作。操作可能是無限的,但存儲只有一個。 –

0

我不是100%確定你的意思是「多少空間」,但如果你的意思是多少空間將分配在內存中 - 它最初只是一個字段。即使頭指針指向自身,所有指針仍然只指向內存中的單個地址空間。請注意,我甚至不確定它最初會指向任何地方,我認爲它們一開始只會被分配空值。

一個簡單的例子。

String a = "Hello" 
String b = a; 
String c = b; 

字符串「你好」只會在內存中出現一次,即使它有幾個指向它的指針。