Java hashCode()方法对于HashSet是不是十分重要?
我们先要理解hash(也被翻译为哈希、散列)算法的功能——它能保证通过一个对象快速查找到另一个对象。hash算法的价值在于速度,它可以保证查询被快速执行。当需要查询集合中某个元素时,hash算法可以直接根据该元素的值计算出该元素的存储位置,从而可以让程序快速定位该元素。为了理解这个概念,我们先看数组(数组是所有能存储一组元素里最快的数据结构)。数组可以包含多个元素,每个元素也有索引,如果需要访问某个数组元素,只需提供该元素的索引,该索引即指出了该元素在数组内存区里的存储位置。表面上看起来,HashSet集合里的元素都没有索引,实际上当程序向HashSet集合中添加元素时,HashSet会根据该元素的hashCode值来计算它的存储位置——也就是说,每个元素的hashCode值就可以决定它的存储“索引”。为什么不直接使用数组,还需要使用HashSet呢?因为数组元素的索引是连续的,而且数组的长度是固定的,无法自由增加数组的长度。而HashSet就不一样了,HashSet采用每个元素的hashCode值来计算其索引,从而可以自由增加HashSet的长度,并可以根据元素的hashCode值来访问元素。因此,当从HashSet中访问元素时,HashSet先计算该元素的hashCode值(也就是调用该对象的hashCode()方法的返回值),然后直接到该hashCode值对应的位置去取出该元素——这就是HashSet速度很快的
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。