HashSet有关问题 重写了hashcode和equals方法为什么还能存的进去

HashSet问题 重写了hashcode和equals方法为什么还能存的进去
import java.util.HashSet;
import java.util.Iterator;

public class HashSetTest {
public static void main(String[] args) {
// TODO 自动生成的方法存根
         HashSet P = new HashSet();
         P.add(new Horse("赤兔",5));
         P.add(new Horse("赤兔",5));
         P.add(new Horse("赤兔",5));
         P.add(new Horse("赤兔",8));
         for(Iterator K= P.iterator();K.hasNext();)
         {
          System.out.println(K.next());
        
         }
}

}
class Horse
{
private String name;
private int age;
Horse(String name,int age)
{
this.name = name;
this.age = age;
}

//下面重写了hashcode和equals方法
public int hashcode()
{
return name.hashCode()+age*23;
}
public boolean equals(Object c)
{
if(!(c instanceof Horse))
{
return false;
}
Horse M =(Horse)c;
return this.name.equals(M.name)&&this.age==M.age;
}
//难道是equals方法有问题?
public String toString()
{
return name+age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
------解决方案--------------------
别的不说
我一眼就看出你的重写hashCode错了

public int hashcode()
{
return name.hashCode()+age*23;
}