Estava tentando ajudar um cara em um post e vim fazer um exemplo para ficar mais fácil, porém o exemplo não deu certo hehe
Eu criei um HashSet para adicionar um objeto meu que possui o equals implementado
Adiciono 2 objetos iguais no HashSet, o equals deles retornou true, mas quando mando exibir todos os itens da coleção aparecem os dois. Na segunda linha da saída mostra o resultado do equals, depois aparecem os 2 elementos da coleção, deveria ser só um
public static void main(String[] args)
{
HashSet<String> strings = new HashSet<String>();
strings.add("texto");
strings.add("texto");
for (Iterator i = strings.iterator(); i.hasNext();) {
String sss = (String) i.next();
System.out.println(sss);
}
HashSet<Vertice> vertices = new HashSet<Vertice>();
Vertice v1 = new Vertice("Rio de Janeiro", 10);
Vertice v2 = new Vertice("Rio de Janeiro", 10);
System.out.println(v1.equals(v2));
vertices.add(v1);
vertices.add(v2);
for (Iterator i = vertices.iterator(); i.hasNext();) {
Vertice v = (Vertice) i.next();
System.out.println(v);
}
}
}
A saída desse programa foi essa
texto
true
Rio de Janeiro - 10
Rio de Janeiro - 10
Não entendi, para mim ele usava o método equals para saber se o elemento já existe, o equals retornou true mas mesmo assim ele adicionou repetido. Alguém sabe dizer o porquê?
se alguém quiser colocar pra rodar aí vai o código da classe Vertice
public class Vertice
{
private String cidade = null;
private int hora = 0;
public Vertice( String c, int h )
{
cidade = c;
hora = h;
}
@Override
public boolean equals(Object o)
{
if (o != null && o instanceof Vertice)
{
Vertice v = (Vertice) o;
if( ( ( v.cidade != null && this.cidade != null ) &&
( v.cidade.equals(this.cidade) ) )
|| ( v.cidade == null && this.cidade == null )
)
{
if( v.hora == this.hora )
return true;
}
}
return false;
}
@Override
public String toString()
{
return cidade + " - " + hora;
}
}