我正在尝试理解hashcode()
。我有两种情况
1) 使用employee2类对象实现hashmap
2) 使用原语实现 hashMap
(尽管它们不是原语)
对于类对象,我知道如果我不实现hashcode()
,它每次都会生成一个随机的 hashcode(),因此当我检索该对象时,它每次都会查找不同的存储桶并返回 NULL
但是当我不使用类对象时,为什么在第二种情况下不会发生这种情况
代码如下:
package programs;
import java.util.*;
public class employee2
{
private int empid;
private String name;
private String dept;
public employee2(int empid,String name,String dept){
this.empid=empid;
this.name=name;
this.dept=dept;
}
int getEmpid(){
return this.empid;
}
@Override public boolean equals(Object o){
employee2 e=(employee2)o;
return getEmpid()==e.empid;
}
@Override public int hashCode() {
int hash = 7;
hash = 83 * hash + this.empid;
return hash;
}
@Override public String toString(){
return empid+", "+name;
}
public static void main(String args[]){
//HashMap with employee class objects
Map<employee2,String> emap=new HashMap<>();
emap.put(new employee2(98446,"Amol Singh","Science"),"good");
emap.put(new employee2(98446,"Robin Singh","Math"),"very good");
// I get null if i dont override hashcode()
System.out.println(emap.get(new employee2(98446,"Robin Singh","Math")));
// New HashMap without Class objects
Map<Integer,String> emap2=new HashMap<>();
emap2.put(23,"amol");
emap2.put(2,"Robin");
// I get correct answer without overriding hashcode()
System.out.println(emap2.get(23));
}
}
最佳答案
基于哈希的集合需要覆盖 hashCode。
如果您不覆盖它,它们将无法正常工作。
Integer
有自己的 hashCode
实现,因此在集合中使用它时无需执行任何操作。
但是,如果要将您创建的类放置在基于哈希的集合中,则必须对它们执行此操作
关于java - hashcode() 仅在类对象的情况下才需要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37781901/