程序里的一个类需要覆盖equals方法,比较两个对象的GUID如果相同则返回TRUE,但是同时应该覆盖hashcode方法。hashcode方法应该如何改写这里guid是以字符串存储的

解决方案 »

  1.   

    你如如何判断equals的,肯定是判断其属性吧hashcode说起来只是一个标识,可以直接返回你的类中的属性的hashcode
      

  2.   

    那用不到重写hashCode方法的,在equals方法中返回GUID比较结果就可以了
      

  3.   

    在改写equals 和 hashCode 函数的时候,一定要遵守如上3条约定,在改写equals的同时也改写hashCode的实现,这样才能保证得到正确的结果。 你想通过一个object的key来拿hashmap的value,hashmap的工作方法是,通过你传入的object的hashcode在内存中找地址,当找到这个地址后再通过equals方法来比较这个地址中的内容是否和你原来放进去的一样,一样就取出value。 
    现在我们定义了 equals() ,我们必须以统一的方法来定义 hashCode() 。一种统一但并不总是有效的定义 hashCode() 的方法如下:public int hashCode() { return 0; } 
      

  4.   

    1. 在同一应用中,一个对象的hashCode函数在equals函数没有更改的情况下,无论调用多少次,它都必须返回同一个整数。 
    2. 两个对象如果调用equals函数是相等的话,那么调用hashCode函数一定会返回相同的整数。 
    3. 两个对象如果调用equals函数是不相等的话,那么调用hashCode函数不要求一定返回不同的整数。
      

  5.   


    public int hashCode(){
        return guid.hashCode();
    }
      

  6.   


    也就是说 guid.hashcode();
      

  7.   

    重写hashcode()的时候可以根据 自己的需要呀。。比如 你可以在这里定义hashcode()返回字符串长度。
      

  8.   


    public class MyObject { public String GUID = null;

    public MyObject(){

    }

    public boolean equals(Object obj){
    if(!(obj instanceof MyObject)){
    return false;
    }

    MyObject mb = (MyObject)obj;
    if(GUID == null || mb.GUID == null){
    return false;
    }

    return GUID.equals(mb.GUID);
    }

    public int hashCode() {
    if(GUID != null){
    return GUID.hashCode();
    }
    return super.hashCode();
    }
    }
      

  9.   

    String 类已经写好了,咱直接用
    GUID.hashCode(),如果你有两个String
    GUID1.hashCode+GUID2.hashCode();
    怎么能return 0;?不解