私はNode
のバイナリツリーを持ち、それを横断したいと思っています。私が見ている最も一般的な方法はStack
、またはLinkedList
です。私はまた、各Node
をスタック/リストに追加しない方法を見てきました。ほとんどの場合、各要素を探索するために再帰を使用します。配列を指すJavaスタックは同じ量のメモリを使用しますか?
List<Node>
をツリー内の各ノードをトラッキングするように設定すると、メモリの量は2*n
になりますか?または、オブジェクトがツリー内にすでに存在するため、リストはノードオブジェクト(Tree内に存在する)へのポインタの集まりに過ぎず、したがってメモリの2倍を占有しませんか?
テストケース:
Object objs[] = new Object[40];
/*
Initialize the 40 objects here
*/
List<Object> objTracker = new List<>();
for(int i=0; i<objs.length; i++) {
objTracker.add(objs[i]);
}
これは今2倍にメモリの量を取る、またはobjs
に格納されているオブジェクトにobjTrackers
だけリダイレクト/ポイントのすべてをするのでしょうか?
アレイでそれらを追跡している場合はどうなりますか?最初の配列のオブジェクトへのポインタの2番目の配列(抽象的には、Javaが明示的に許可しないので)は、配列2の新しいオブジェクトセットを作成するのと同じ量のメモリを使用しますか? –
もちろんです。あなたがそれにバナナを入れた箱を持っていて、そこに "箱1を見る"と書いてあるメモが入っている2番目の箱があれば、どれくらいのバナナがありますか?メモを含むボックスを追加するとどうなりますか?コンテナオブジェクト(ボックス、配列、リスト)と参照(注釈)のみが追加されます。 – Kayaman
さて、配列作成では、私は 'new'を使っています。で示されるように、 'object [] objs = new Object [30];'。私はそれが30スロットのための十分なスペースをメモリに確保すると思った。もしそうなら、なぜ私は各スロットを 'new Object()'に割り当て始めたら、もっとスペースを取るべきでしょうか? –