hashCode()方法对HashSet,HashMap的重要作用

        上一篇文章介绍了HashSet是如何判断元素相同的,其中有一个很重要的方法是hashCode()。从《疯狂Java讲义》中看到了hashCode()方法的具体作用,记录一下。

        hash(也被翻译为哈希、散列)算法的功能是,它能保证快速查找被检索的对象,hash算法的价值在于速度。当需要查询集合中的某个元素时,hash算法可以直接根据元素的hashCode值计算出该元素的存储位置,从而快速定位该元素。为了理解这个概念,可以先看数组(数组是所有能存储一组元素里最快的数据结构)。数组可以包含多个元素,每个元素都有索引 。如果需要访问某个数组元素,只需提供该元素的索引,接下来即可根据索引值计算该元素在内存里的存储位置。

        表面上看起来,HashSet集合里面的元素都是没有索引的,实际上当程序向HashSet中添加元素时,HashSet会根据元素的hashCode值来计算它的存储位置,这也可以快速定位该元素。

        为什么不直接使用数组,还需要使用HashSet呢?因为数组元素的索引是连续的,而数组的长度是固定的,无法自由增加数组的长度。而HashSet就不一样了,HashSet采用每个元素的hashCode值来计算其存储位置,从而可以自由增加长度,并可以根据元素的hashCode值来访问元素。因此,当从HashSet中访问元素时,HashSet先计算元素的hashCode值(也就是调用该对象的hashCode()方法的返回值),然后直接的该hashCode值对应的位置取出该元素——这就是HashSet速度很快的原因。


猜你喜欢

转载自blog.csdn.net/bingocoder/article/details/80301342