以下の例では、BigSet
ハッシュセットはSmallSet
ハッシュセットで構成されています。 BigSet
を消去せずにSmallSet
をクリアしたいと思います。Java:ハッシュセットのハッシュセットを更新する
代わりにSmallSet
でclear()
コマンドを実行すると、BigSet
もクリアされます。なぜこれが起こるのですか?そしてBigSet
をそのまま残して、どうすればSmallSet
をクリアするだけですか?
何が起こっているのかを説明するために、printステートメントが含まれています。
import java.util.HashSet;
import java.util.Set;
import java.util.Arrays;
public class G{
public static final HashSet<HashSet> BigSet = new HashSet <HashSet>();
public static final HashSet<Set> SmallSet = new HashSet<Set>();
public static Set<Integer> method() {
Set<Integer> n = new HashSet<Integer>(Arrays.asList(10, 20, 30));
SmallSet.add(n);
BigSet.add(SmallSet);
System.out.println(SmallSet);
System.out.println(BigSet);
SmallSet.clear();
System.out.println(SmallSet);
System.out.println(BigSet);
return n;
}
public static void main(String[] args) {
method();
}
}
出力:
[[20, 10, 30]]
[[[20, 10, 30]]]
[]
[[]]
OPはbigSetがセットを含むセットであることを述べています。私はOPが追加する要素を探しているとは思わない。 – sprinter
多くの意味があります。 BigSet.add(新しいHashSet(SmallSet))は私が探していたものです。ありがとう – haxtar
私は 'BigSet.add(新しいHashSet ...)'と 'BigSet.addAll(...) '全く同じことをしますが、addAllは' SmallSet'から 'new HashSet'にダンプする必要がないため、倍速が2倍です。私は非常に 'addAll'を' add(new' – corsiKa