boa pergunta essa…
posso estar errado mas eu acho que quando vc adiciona um elemento no conjunto ele faz uma cópia desse elemento por isso a mundança que vc faz em k2 não reflete no conjunto…
mas não sei se estou certo…
a outra possibilidade(talvez a que seja a melhor)…
eh que quando vc altera um elemento que adicionou no conjunto como foi feito no código nada será verificado se existe um outro elemento igual ao que vc modificou…
o conjunto só testa se ha elementos semelhantes no método add…
Puts deixa ver se entende, depois de adicionado um elemento na lista se for alterado o seu estado não tera uma verificaçao com isso nao tera como remover ele da lista?
import java.util.*;
class KeyMaster {
public int i;
public KeyMaster(int i) { this.i = i; }
public boolean equals(Object o) { return i == ((KeyMaster)o).i; }
public int hashCode() { return i; }
}
public class MapIt {
public static void main(String[] args) {
Set<KeyMaster> set = new HashSet<KeyMaster>();
KeyMaster k1 = new KeyMaster(1);
KeyMaster k2 = new KeyMaster(2);
set.add(k1);
set.add(k2);
//altero k2 pra 3
k2.i = 3;
KeyMaster k3 = new KeyMaster(3);
//vai remover o objeto k2 que eu inseri no conjunto(lembra alterei ele pra 3)
set.remove(k3)
}
}
ops perdão…
realmente não funciona por causa dos contratos(hashcode e equals)…
eh realmente pra não tem como vc remover o objeto depois que vc altera o seu estado…
eh uma boa questão, mas só lembrando que esse código mostra uma má prática de programação…