Im folgenden Beispiel besteht das HashSet BigSet
aus SmallSet
HashSets. Ich möchte SmallSet
löschen, ohne BigSet
zu löschen.Java: Aktualisieren von Hashsets von Hashsets
Stattdessen, wenn ich den clear()
Befehl auf SmallSet
ausführen, wird BigSet
auch gelöscht. Warum passiert das? Und wie kann ich nur SmallSet
löschen, während BigSet
intakt bleibt?
Ich habe Druckanweisungen hinzugefügt, um zu veranschaulichen, was vor sich geht.
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();
}
}
Ausgang:
[[20, 10, 30]]
[[[20, 10, 30]]]
[]
[[]]
OP sagt, dass bigSet ein Satz Sets enthalten ist. Ich glaube nicht, dass OP nach den Elementen sucht, die hinzugefügt werden sollen. – sprinter
Macht viel Sinn. BigSet.add (neues HashSet (SmallSet)) ist was ich gesucht habe. Danke – haxtar
Ich werde sagen, dass 'BigSet.add (neue HashSet ...)' und 'BigSet.addAll (...) 'genau dasselbe, aber addAll ist doppelt so schnell, weil es nicht von' SmallSet' in das 'newHashSet' dumpen muss. Ich empfehle "addAll" über 'add (new' – corsiKa