2

私は Java LinkedList のソース コードを読んでいますが、のコンストラクターLinkedListは次のようになっていることに注意してください。

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

この初期化にどれだけのスペースが割り当てられるか、ヘッダーはそれ自体を指すことで無限再帰を作成するようです。

4

2 に答える 2

4

headerインスタンス変数の初期化で単一のノードを割り当てます。

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

参照するコンストラクターのコードはメモリを割り当てません。ポインタを初期状態に設定するだけです。内部トラバーサルがこの状況に対応するため、「無限再帰」はありません。

于 2012-11-26T02:32:43.117 に答える
0

「スペースの数」とは何を意味するのか100%わかりませんが、メモリに割り当てられるスペースの量を意味する場合、最初は1つのフィールドにすぎません。ヘッダー ポインターはそれ自体を指しますが、すべてのポインターはメモリ内の 1 つのアドレス空間のみを指します。注意してください、最初はどこを指しているのかさえわかりません。最初はnull値のみが割り当てられると思います。

簡単な例。

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

文字列 "Hello" は、それへのポインターが複数ある場合でも、メモリ内で 1 回だけ発生します。

于 2012-11-26T02:36:27.490 に答える