Double型の二重リンクリストを作成していますが、同じ型の別のリンクリストを宣言しても、常に最初のリストを参照します。など参照なしでJavaでLinkedListを二重にコピーする方法はありますか?
:
LinkedList<LinkedList<Double>> trainingData = new LinkedList<LinkedList<Double>>();
LinkedList<LinkedList<Double>> newData = new LinkedList<LinkedList<Double>>();
は、この割り当てがあるnewDataに変更されます後、私はtrainingDataに作るものは何でも変更後
... trainingDataに
newData = trainingData;
をいくつかのものを追加します。私はnewDataのコンストラクタでtrainingDataを渡して、newDataにtrainingDataのデータを割り当てるネストループを使用してみましたが、newDataがtrainingDataを参照しているのと同じ結果が得られます。
これは権利であるようなものディープコピーです。 newData = trainingData newDataとtrainingDataは、同じリスト(trainingDataに最初に割り当てられたもの)への参照を保持します。新しいリストコピー(または新しいリスト要素)が割り当てられる/されない/引き起こされる。 –
linkedListインスタンスでclone()を呼び出すだけでは、浅いコピーが作成されるため、手動の繰り返しが本当に必要であることにも注意してください。http://java.sun.com/javase/6/docs/api/java/ util/LinkedList.html#clone() – Stephan202
@ Stephen202:リストの内容によっては、十分ではないかもしれません。それらが不変のオブジェクトであれば、浅いコピーは綺麗ではありませんが、好ましくは、クローン作成不可能なものはCPUとメモリの無駄です。 –