Das ist eine Art Duplikat von this question,, aber ich suche ein bisschen mehr ELI5 Erklärung der "veränderbaren Schlüssel" und "Eimer" in den Antworten.Wie ändert man Werte in HashSet?
Hier ist mein Code, dass ich nicht verstehen habe:
HashSet<Object> set = new HashSet<Object>();
set.add(1); set.add(2); set.add(3);
for(Object i : set)
if(i.equals(1)) {
i = 1337;
System.out.println("FOUND");
}
for(Object i : set) System.out.println(i);
Ausgang:
FOUND
1
2
3
Warum aus 1337, 2, bedeutet dies nicht 3 drucken statt?
Die gleiche Frage gilt für das Entfernen von Objekten.
EDIT:
Das tut, was ich will, aber ich bin ziemlich sicher, es ist nicht der richtige Weg, um darüber zu gehen:
for(Object i : set)
if(i.equals(1)) {
set.remove(i);
set.add(1337);
break;
}
Es geht darum, keine Referenzzuweisungen innerhalb einer for-each-Schleife vornehmen zu können, und hat nichts mit veränderbaren vs. nicht veränderbaren Schlüsseln zu tun. Die i-Variable ist eine temporär begrenzte Bereichsvariable, und das Ändern ihrer Zuweisung hat keine Auswirkungen auf den Inhalt der Sammlung, über die iteriert wird. –
@HovercraftFullOfEels dies zu realisieren war eine sehr dumme Frage ... –