日期:2014-05-20  浏览次数:20793 次

一个关于java的hashCode方法的问题,请高手指点,谢谢
给定以下类,哪个是hashCode()方法的正确实现?
class ValuePair {
public int a, b;
public boolean equals(Object other) {
  try {
  ValuePair o = (ValuePair) other;
return (a == o.a && b == o.b)
|| (a == o.b && b == o.a);
  } catch (ClassCastException cce) {
return false;
}
}
public int hashCode() {
//Provide implementation here.
}
}

请选出3个正确答案。
A)return 0;
B)return a;
C)return a + b;
D)return a – b;
E)return a ^ b;
F)return (a << 16) | b;


这道题中的hashCode方法的作用是什么?
以及hashCode方法和equals方法有什么联系呢?


------解决方案--------------------
E F 
hasCode()不同的对象equals()必须返回false。
------解决方案--------------------
按照jse规范所言,如果两个对象使用equals()方法比较相等,那么他们的hashCode()返回值应当一致,楼主的equals判断条件是a=o.a且b=o.b,或者a=o.b且b=o.a,只要满足其中之一两个对象就相等,那么照这种思路,其哈希吗的实现可以有下面两种:

------解决方案--------------------
探讨

引用:
按照jse规范所言,如果两个对象使用equals()方法比较相等,那么他们的hashCode()返回值应当一致,楼主的equals判断条件是a=o.a且b=o.b,或者a=o.b且b=o.a,只要满足其中之一两个对象就相等,那么照这种思路,其哈希吗的实现可以有下面两种:
retrun a*b;或者return a+b


可是这道题的答案要选三个

------解决方案--------------------
实现hashCode有个简单的方法:
读取equals方法使用的所有字段hash码,然后对它们进行^操作