本帖最后由 HawkOfWinter 于 2011-07-13 22:41:01 编辑

解决方案 »

  1.   

    hashCode重载是为了加入哈希表做准备如果需要将该类型的实例作为key加入哈希表系列的集合中(包括HashTable,HashMap,HashSet等),就必须实现此方法。
    哈希表需要根据hashCode来决定存放对象的位置,以及存放之后的快速查询定位。hashCode不要求唯一
      

  2.   

    HashMap 数据结构里面的散列表,实现键值对的快速查找。Java 标准库内置对它的支持。
      

  3.   

    给准备给需要用到hash值的类。以hashmap为例子,你打开源码会发现 transient Entry[] table;
    hashmap操作的其实是一个数组。再继续看个简单点的hashmap的get方法   public V get(Object key) {
            if (key == null)
                return getForNullKey();
            int hash = hash(key.hashCode());
            for (Entry<K,V> e = table[indexFor(hash, table.length)];
                 e != null;
                 e = e.next) {
                Object k;
                if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
                    return e.value;
            }
            return null;
        }
    key.hash被用来计算数组的下标
      

  4.   

    首先,这个不叫重载(overloading),这个是override。
      

  5.   

    当equals方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。 
      

  6.   

         * Note that it is generally necessary to override the <tt>hashCode</tt>
         * method whenever this method is overridden, so as to maintain the
         * general contract for the <tt>hashCode</tt> method, which states
         * that equal objects must have equal hash codes. from java.lang.Object src相同的对象必须有相同的hash code
      

  7.   

    public class Sample {
        public static void main(String[] args) {
          String s1="ss";
          String s2="ss";
          if(s1.equals(s2)){
           System.out.println("s1和s2的hashCode是一样的");
          }else{
           System.out.println("error");
          }
        } 

    }
      

  8.   

    有没有小实例,能直观看到它的好。我为什么觉得,不override也不影响代码的。
      

  9.   

    当equals方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,放到set这种结构对象里面这个需要重新一方面定位速度快,另外一方面,两个对象相等 ,hashcode必须相等 
      

  10.   

    当equals方法被重写时,通常也要重写 hashCode方法。hashCode重载是为了加入哈希表做准备
      

  11.   

    正解 如果你的类不准备用于集合类那就可以不用重写了 , 另外注意重写中不可出现 transient 类型的数据 transient 表示该类型不可以被序列化  ,所以在序列化与反序列化中会出现问题