减少new创建对象的开销,保证对于相同的i和相同的j能够得到相同的hashcode,那么就没有问题。
其实你查看一下hashmap的源代码就知道了,hashmap其实是根据key的hashcode计算对象存放位置的

解决方案 »

  1.   

    只要重写了Key的hashCode和equals方法完全可以啊!
      

  2.   


    需要保证对应不同的i和j,hashcode必须唯一码?
      

  3.   

    有点意思,存和取是同一对象是可行的
    看了一下HashMap的源码,存和取都是比较hashCode并且判断是否同一对象,若不是再调用equals方法
    按照lz的想法,HashMap的每个Entery的key的内存地址是一样的,所以调key的equals方法永远是跟最新放进去的key是相等的,但是Entry的hash不一样,所以放还是没问题的;那么取的时候,如果跟存的是同一个对象,找到对应的hash,然后就找到对应的Entry,value也就获得了。所以强调是同一对象,如果存和取不是同一对象,那么虽然能找到hash相等的,除了最后put进去的,其他恐怕就get不到了
    ps:如果是同一对象,equals方法也没要重写了
      

  4.   


    需要保证对应不同的i和j,hashcode必须唯一码?如果hashcode不一样,这两个实例必须不同。但是两个不同的实例可以用相同的hashcode
      

  5.   

    必须重写equals 和 hashcode方法
      

  6.   

    首先要明白怎样就能根据key找到value。因为hashMap内部的数据结构是数组链表,所以两步
    1.找到第几个链表,即数组的第几个位置
    2.找到该链表,然后遍历链表查看是否存在该value对于第一步,hashMap内部是根据key的hashcode来找的,所以要重写hashcode方法;
    对于第二步,遍历时是比较key,查找是否有相同的key,而比较又会用到equals方法,所以要重写equals方法。