java中hashCode()在Map中的作用

Thinking.In.Java 笔记 20140526 14:33

1、Map很容易实现,两个数组相应位置对应就是一个Map了

2、在这种情况下,拿一个key过来如何取得对应的value呢?就是拿这个key和存放key的数组的元素用equals方法一一比较,找到key在key数组中的位置,然后取对应的value

3、考虑提升效率,就有了hashCode(),散列算法

4、如何提升的,这样存储Map,对于每一对key-value,先通过key的hashCode()算法计算出一个散列值,在一个数组的散列值(刚计算出来的)的位置上,放入这个key-value对,可以用对象打包一下(两个属性,一个key,一个value),随便都行

5、按这种方式存储Map,这时候拿来一个key,先执行hashCode()方法计算散列值,找到在数组中的位置,然后这个位置上可能有数个key-value对,再用equals方法来找到准确的那个

6、原来通过key找value时,需要线性比较所有的key,利用hashCode()方法比较的会少很多,理想的情况是,所有的key-value平均的分布在一个数组上

7、现在来看hashMap,应该就是一个数组上,每个位置最多只有一个key-value对,但是并不一定是数组中所有的位置都有一个key-value对,这个情况是最理想的情况,一般情况是,有许多空的位置,这一条是自己懂了上面的,自己悟出来的,仅供参考

8、现在来考虑通过key找一个hashMap中value的过程,首先,调用hashCode()方法计算散列值,然后equals比较相同,看各种视频也没明白到这份上,还是理解机理比较重要。

你可能感兴趣的:(java,equals(),hashCode())