gpt4 book ai didi

java - hashcode() 和 equals() 方法

转载 作者:搜寻专家 更新时间:2023-10-30 21:46:58 24 4
gpt4 key购买 nike

<分区>

所以我有一个关于 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 再次添加 Alex 时,equals() 总是调用你的时间

因为没有索引 n hashmap 所以如果它首先与之前添加的 Alex 进行检查它将返回 true 并且不应该为其他两个元素调用(peter 和 martin)但 equals 总是调用 3 次

为什么..?

同一个桶中的对象是否也有索引......??

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com