当前位置: 代码迷 >> J2SE >> 关于hashCode()步骤的疑惑
  详细解决方案

关于hashCode()步骤的疑惑

热度:118   发布时间:2016-04-23 19:47:02.0
关于hashCode()方法的疑惑
Object类里面有一个hashCode()方法,根据对象的地址来计算哈希码。
但是一般的类都重写了hashCode()方法,根据有意义的实例变量(equals()方法比较标准的实例变量)计算出一个hashCode值。
像HashSet中删除一个对象,会先计算出该对象的hashCode值,从而找到该对象在集合中的保存位置。请问这里的hashCode值不是根据地址计算出来的,怎么能找到对象的存储位置啊???
------解决思路----------------------
该存储位置是由HashSet或者HashMap内部的具体结构所决定,如果是HashMap,里面可能有一个类似数组的存储空间

通过hashCode找到该“数组”的下标


------解决思路----------------------
看JDK源码是最好的方式
------解决思路----------------------
因为比如HashSet之类的,元素唯一、无须,所以他需要一个找到元素的标致,这个标志就用的hashCode,
他说的通过hashCode找到位置,不是说直接在内存中找到,而是说的在JVM代码级别找到。
------解决思路----------------------
推荐直接看代码.... 并不难
hashMap 还是用到了类本身的hasCode, 只不过又加入了一点别的算法...
另外, 这是在数据结构里找对象, 并不是在内存中搜索的..... 
------解决思路----------------------
一般hashcode()方法是根据你的需要来重写的。
个人感觉hashcode方法只是为了减少找到某个对象的时间,并不是能唯一定位对象,一个hashcode可以对应好多个对象。