其他分享
首页 > 其他分享> > 9.12每日一考

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)来存方数据,可以实现集合中元素的快速查找。

二次哈希原因:为了让最后计算的索引分布的足够均匀,防止某个链表过长出现红黑树树化

常见的Map集合

  1. HashMap:数组+链表存储数据,线程不安全,1.8后数组+(链表|红黑树)
  2. ConcurrentHashMap:JDK1.7采用分段

    标签:一考,hash,HashMap,对象,每日,元素,9.12,链表,哈希
    来源: https://www.cnblogs.com/bieyinan/p/16687240.html