请问如何覆盖Hashcode,产生Hash码,通过产生的Hash码利用Equals方法如何判断两个对象是否相等??谢谢!

解决方案 »

  1.   

    在你的类中覆写hashCode(),如String类的hashCode()如下,你可以按要求自己改:
    public int hashCode() {
    int h = hash;
    if (h == 0) {
    int off = offset;
    char val[] = value;
    int len = count;for (int i = 0; i < len; i++) {
    h = 31*h + val[off++];
    }
    hash = h;
    }
    return h;
    }
      

  2.   

    hashCode并不能保证对象的相等,它只是在HashMap、HashSet、HashTable之类的类内部需要使用你要保证的只是a.equals(b) 可以推出 a.hashCode() == b.hashCode();但是反之是不能保证成立的。至于hashCode你怎么写是你的事情,随便写也无所谓,保证上面的式子成立
      

  3.   

    public int hashCode()是Object里的方法,他返回一个整型数值,作用是映射他的内存存储地址。任何类都可以通过覆写这个方法来获得自己所希望的hash码,我给你的例子是String类里的hashCode()举例.那些变量也是String里的context,你可以不用理会。
        如果你是想通过equals方法来判断对象是否相等,是想比较value或者reference也都可以覆写你类的equals来达到要求。因为equals()方法也是Object里的方法,默认是比较reference的。一般来说,你所熟悉的很多类 ,如Integer,Double,Character等等,他们都覆写了这个方法,所以在你在使用他们时,实现的不是reference而是value比较。