看到很多关于集合的提问,在看张老师的视频中,不禁把这些疑问提出来
链表明白一点,只是hashSet中,hashCode在里面究竟是什么功能?
解答:表面看起来,HashSet集合里的元素都没有索引,实际上当程序向HashSet集合中添加元素时,HashSet会根据元素的hashCode值来决定他的存储位置,即每个元素的hashCode就是他的“索引”,从而可以自由增加HashSet的长度,并可以根据元素的hashCode值来访问元素。因此,当从HashSet中访问元素时,HashSet先计算该元素的hashCode值,然后直接到该hashCode对应的位置去取出元素--这就是HashSet速度很快的原因。
所谓存储的区域,究竟是如何划分的?为什么有些相同的元素也可以存进hashSet?
解答:如何划分,这个不在了解范围。相同元素可以存入hashSet,那是因为他们的hashcode值不一样,这就涉及到HashSet集合保证元素唯一性:
通过元素的hashCode方法,和equals方法完成的。 当元素的hashCode值相同时,才继续判断元素的equals是否为true。
如果为true,那么视为相同元素,不存。如果为false,那么存储。 如果hashCode值不同,那么不判断equals,从而提高对象比较的速度。
说白了,就是很多底层的东西没有明白
哪位高手解解惑?
谢谢!
|