03.20 最直观的理解:Java中hashCode()使用

最直观的理解:Java中hashCode()使用

大家都知道,在Java中,常常会有基于散列值的集合,比如HashMap,HashTable等,这些集合往往采用哈希表的原理,通过对象的hashcode()方法获取其哈希值,从而快速地从集合中查找自己想要查找的目标值。

举个例子

假如现在一个集合中存储了不同的10个值,如果想要从这10个值中查找某个目标值X,传统的方法可能是挨个调用equals()方法,进行遍历比较,最多比较10次即可获得结果。

但是这样的方法很明显不符合我等程序猿的身份。

最直观的理解:Java中hashCode()使用

于是Java利用hashcode值进行了改进,改进后的方法是这样的:

在最初存入这10个值的时候,计算出每个对象的hashcode值并将其对10取余,即可获得一个小于10的下标

  1. 如果集合中位于这个下标的位置是空的,那就把当前对象存在该位置上;

  2. 如果该位置上已经存在元素了,那么就调用equals()方法进行比较,相同的话,就不再重复存入

  3. 不同的话,采用一些哈希冲突解决的办法(比如HashMap中采用的是拉链法

查询的过程同理:

  1. 如果通过hashcode值发现某个位置为空,则说明该集合中不存在该对象,查找失败;

  2. 如果发现不为空,则调用equals()进行比较,如果相同,则查找成功;

  3. 如果不同,则查找失败。

这样做的好处显而易见,那就是调用equals()方法的次数大大降低,几乎只需要一两次就可以直接查找到目标值,很大的提高了查询的效率。


分享到:


相關文章: