hashcode () и метод equals () [дубликаты]
На этот вопрос уже есть ответ:
Какие проблемы следует учитывать при переопределении equals и hashCode в Java? 11 ответову меня есть вопрос о методе hashcode () и equals ()
Допустим, я просто пишу очень простую программу, переопределяющую оба метода
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;
}
}
Затем, скажем, я пишу другой класс для добавления и перебора элементов в 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());
}
}
}
теперь вопрос в том, когда я пытаюсь добавить Алекса снова с тем же empid, что equals () всегда называется тобой times
поскольку отсутствует индекс n hashmap, поэтому в случае, если он сначала будет проверен с ранее добавленным Alex, он вернет true и не должен вызываться для двух других элементов (peter и martin), но всегда вызывается 3 раза
Зачем..?
is объекты в том же сегменте также имеют индекс .. ??