hashcode () y método equals () [duplicado]
Esta pregunta ya tiene una respuesta aquí:
¿Qué problemas deben tenerse en cuenta al anular equals y hashCode en Java? 11 respuestasso tengo una pregunta sobre el método hashcode () y equals ()
Digamos que acabo de escribir un programa muy básico que anula los dos métodos
import java.util.*;
class Employee
{
private String name;
private int empid;
public Employee(String name,int empid)
{
this.name=name;
this.empid=empid;
}
public int getEmpid()
{
return empid;
}
public String getName()
{
return name;
}
public boolean equals(Object obj)
{
System.out.println("equals has just been called...");
Employee e1=(Employee)obj;
return ((name.equals(e1.name)) && (empid==e1.empid));
}
public int hashCode()
{
System.out.println("hashcode called...");
return empid;
}
}
Entonces, digamos que escribo otra clase para agregar e iterar los elementos en HashSet
class Five
{
public static void main(String args[])
{
HashSet hs1=new HashSet();
hs1.add(new Employee("Alex",25));
hs1.add(new Employee("Peter",25));
hs1.add(new Employee("Martin",25));
hs1.add(new Employee("Alex",25));
Iterator itr=hs1.iterator();
while(itr.hasNext())
{
Employee e=(Employee)itr.next();
System.out.println(e.getEmpid()+"\t"+e.getName());
}
}
}
ahora la pregunta es cuando trato de agregar a Alex nuevamente con el mismo vacío, el igual () siempre te llamó veces
como no hay un índice n hashmap, por lo que si se verifica por primera vez con Alex previamente agregado, devolverá verdadero y no debería llamarse para los otros dos elementos (peter y martin), pero siempre es igual a 3 veces
por qué..?
os objetos @is dentro del mismo depósito también tienen el índice .. ??