9.12每日一考
作者:互联网
set集合如何保证元素不重复 3
1.在set集合添加元素时,会首先调用该对象的hashcode方法计算哈希值
2.将计算出的哈希值去哈希表中查询,如果不存在该值,则添加成功,否则调用对象的equals方法比较对象的内存地址,如果内存地址也相同,则是重复的对象,该对象添加失败。如果equals返回的是false,则说明两个对象不是同一个对象。则该对象就会添加到已有对象链表的末尾。该种情况称为hash碰撞。
目的:如果直接调用equals方法,当数据量过大时,么此调用一次equals方法,效率低,用hashCode方法比较减少对象比较次数,提高查找效率。
注意:哈希值相同的对象不一定相同,但内存地址相同的对象哈希值一定相同(如Aa和BB,Bb和CC,Cc和DD的哈希值就相同)
HashMap是如何快速定位到数据的 3
简说:时间换空间,空间换时间,它内部通过空间换时间的方法,用一个大数组存储所有的value ,并根据key直接计算出value应该存储在那个索引
细说:由于HashMap底层数据结构是数组加链表or红黑树的实现,所以进行定位时,先利用哈希值定位到数据元素,再便利该元素链表,找出对应元素。通过原始哈希值,二次哈希值,桶下标(二次哈希值%16)来存方数据,可以实现集合中元素的快速查找。
二次哈希原因:为了让最后计算的索引分布的足够均匀,防止某个链表过长出现红黑树树化