私は Java LinkedList のソース コードを読んでいますが、のコンストラクターLinkedList
は次のようになっていることに注意してください。
public LinkedList() {
header.next = header.previous = header;
}
この初期化にどれだけのスペースが割り当てられるか、ヘッダーはそれ自体を指すことで無限再帰を作成するようです。
私は Java LinkedList のソース コードを読んでいますが、のコンストラクターLinkedList
は次のようになっていることに注意してください。
public LinkedList() {
header.next = header.previous = header;
}
この初期化にどれだけのスペースが割り当てられるか、ヘッダーはそれ自体を指すことで無限再帰を作成するようです。
header
インスタンス変数の初期化で単一のノードを割り当てます。
private transient Entry<E> header = new Entry<E>(null, null, null);
参照するコンストラクターのコードはメモリを割り当てません。ポインタを初期状態に設定するだけです。内部トラバーサルがこの状況に対応するため、「無限再帰」はありません。
「スペースの数」とは何を意味するのか100%わかりませんが、メモリに割り当てられるスペースの量を意味する場合、最初は1つのフィールドにすぎません。ヘッダー ポインターはそれ自体を指しますが、すべてのポインターはメモリ内の 1 つのアドレス空間のみを指します。注意してください、最初はどこを指しているのかさえわかりません。最初はnull値のみが割り当てられると思います。
簡単な例。
String a = "Hello"
String b = a;
String c = b;
文字列 "Hello" は、それへのポインターが複数ある場合でも、メモリ内で 1 回だけ発生します。