标签:一考 hash HashMap 对象 每日 元素 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集合
- HashMap:数组+链表存储数据,线程不安全,1.8后数组+(链表|红黑树)
- ConcurrentHashMap:JDK1.7采用分段
标签:一考,hash,HashMap,对象,每日,元素,9.12,链表,哈希 来源: https://www.cnblogs.com/bieyinan/p/16687240.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。