Javaの参照割り当てに問題があります。
私の説明:私のコードでは、後でHashMapの値として代入されるBooleanWrapのArrayList(家で作られたブール値のクラス)を使用しています(このArrayListの値を更新するサイクルがあります条件が確認されるまで)。このような
何か:Javaで変数を再利用する際の問題
ArrayList<BooleanWrap> temp=new ArrayList <BooleanWrap>(48);
//cycle: operations to fill the ArrayList, then a condition is satisfied
hashMap.put(index, temp);
その後、私は一時変数を再利用する必要があるので、私はそれを再初期化する必要があります。私は、次の手順でそれを行う:ハッシュマップの値は、変数の参照だけではなく、実際の値が保存されますように割り当てるTEMP:私の問題が来る
for(BooleanWrap bool: temp){
bool.set(false);
}
。
したがって、tempを再初期化すると、ハッシュマップ内の更新も発生します(この場合、すべてをfalseに設定します)。
今、私はclone()メソッドでも、同じ結果(ArrayListの浅いコピーを生成するため)を得るべきだと思います。
後でその参照をハッシュマップに割り当てることなく、同じ変数tempを自分のサイクルで再利用する方法はありますか?
実際に私は、ArrayListの深いコピーを作成する方法でそれを行うことができます。
public static ArrayList<BooleanWrap> deepcopy(ArrayList<BooleanWrap> original){
ArrayList<BooleanWrap> copy=new ArrayList<BooleanWrap>(48);
for(BooleanWrap bool: original)
copy.add(new BooleanWrap (bool.get()));
return copy;
}
が、私は他の方法がなく、それができるように短いなどのインライン行って何かを、必要とします。
アドバイス/提案/侮辱?
ブール値はすでにJavaに存在します。カスタムブールラッパーは必要ありません。また、なぜあなたは一時的なものを再利用する必要があるのか分かりません。なぜ新しい変数を使用しないのですか?代わりに、 'ArrayList'の新しいインスタンスをtempに割り当てるだけではどうですか?私はあなたに良い理由があると確信していますが、私はあなたの質問に基づいてそれらを理解することはできません。 – dlev
私は自分のサイクルで私は何回私は私のハッシュマップに入れようとしているのか分からないので、一時的なものを再利用する必要があります:それはプログラムで、私はすべてのhashmap.putのための新しい単一のarraylistオブジェクトを作成することはできません。私は確かに何かが不足している= |しかし、私は、arraylistの新しいインスタンスをtempに割り当てようとしましたが、その後、最後のものを除いて、ハッシュマップのすべてのarraylistがfalse値でいっぱいになりました。 – breathe0