我试图了解如果我们hashCode()
错误地实施方法会面临哪些问题。
例如,我尝试创建一个示例类HashEx
,该类为该类的所有实例静态返回相同的哈希值 (100),然后尝试使用HashEx
in HashSet
/HashMap
进行不同的操作:
HashSet -> add,read,contains
HashMap -> put,get
到目前为止,所有操作似乎都运行良好。对这个疯狂的想法有什么想法吗?我试图了解这种错误的实施hashCode()
会在哪里产生问题?
public class HashEx {
public int id;
public String name;
public static void main(String[] args){
HashEx e1 = new HashEx();
e1.id=1;
e1.name="Tom";
HashEx e2 = new HashEx();
e2.id=2;
e2.name="Jerry";
// set
HashSet<HashEx> myset = new HashSet<HashEx>();
myset.add(e1);
myset.add(e2);
System.out.println("Set size : "+ myset.size());
for(HashEx e : myset){
System.out.println("id: " + e.id + ", name: " + e.name);
}
HashEx e4 = new HashEx();
e4.id = 2;
e4.name = "Jerry";
System.out.println("myset.contains(e4) : " + myset.contains(e4));
// map
HashMap<HashEx, String> map = new HashMap<HashEx, String>();
map.put(e1, "Tom");
map.put(e2, "Jerry");
System.out.println("Map size : "+ map.size());
System.out.println(map.get(e1));
System.out.println(map.get(e2));
}
@Override
public boolean equals(Object obj) {
if(((HashEx)obj).id != id)
return false;
if(!((HashEx)obj).name.equals(name))
return false;
return true;
}
@Override
public int hashCode() {
return 100;
}
}