Это своего рода дубликат 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 вместо этого?
Этот же вопрос касается удаления объектов.
EDIT:
Это делает то, что я хочу, но я абсолютно уверен, его не правильный путь идти о нем:
for(Object i : set)
if(i.equals(1)) {
set.remove(i);
set.add(1337);
break;
}
Все дело в том, что нельзя назначать ссылки в цикле for-each и не имеет ничего общего с изменяемыми или не изменяемыми ключами. Переменная i - временная ограниченная переменная области видимости, и изменение ее назначения не будет влиять на содержимое переработанной коллекции. –
@HovercraftFullOfEels, понимая, что это был очень глупый вопрос ... –