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 объекты в том же сегменте также имеют индекс .. ??

Ответы на вопрос(4)

Ваш ответ на вопрос