這是一種this question,的重複,但是我正在尋找更多的ELI5在答案中的「可變鍵」和「桶」的解釋。如何更改HashSet中的值?
這裏是我的代碼,我無法理解:
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);
輸出:
FOUND
1
2
3
爲什麼這個沒有打印出1337,2,3呢?
同樣的問題去除對象。
編輯:
此我想要做什麼,但我敢肯定它不是正確的方法去做:
for(Object i : set)
if(i.equals(1)) {
set.remove(i);
set.add(1337);
break;
}
這是所有關於不能在for-each循環內進行引用賦值,並且與可變與不可變鍵無關。我的變量是一個臨時的有限範圍變量,改變它的賦值對正在迭代的集合的內容沒有影響。 –
@HovercraftFullOfEels意識到這是一個非常愚蠢的問題... –