标签:hashmap 拉链 哈希 链表 key HashMap
HashMap
hashmap底层实现:哈希表+链表+红黑树。
用key算出哈希值,用哈希值计算元素在哈希表中的位置,将元素添加到对应位置。
当有重复位置的元素加进来时,以链表的形式存储(是避免哈希冲突的解决办法,拉链法
)
拉链法:
java 标准库的 HashMap 基本上就是用拉链法实现的。拉链法的实现比较简单,将链表和数组相结合。也就是说创建一个链表数组,数组中每一格就是一个链表。若遇到哈希冲突,则将冲突的值加到链表中即可。
实现步骤:
1、 得到一个key
2、 计算key的HashValue
3、 根据HashValue值定位到data[hashValue]
。( data[hashValue]
是一条链表)
4、 若data[hashValue]
为空,则直接插入。
5、 不然则添加到链表末尾。
哈希表的默认长度为16,负载因子为0.75.
它底层的扩容机制是每当存储了3/4的元素后就会开始扩容,每次触发扩容机制时,扩容为原来的2倍。
当然也可以使用构造方法来指定存储长度以及负载因子的值。
在此之前提到的HashSet的底层就是HashMap。
hashmap是无序的(不按照添加顺序进行排序的);而且底层有hashcode()方法以及equals() 方法来进行判断的,避免存入重复的键。
注意:当出现重复的键时,后面出现的键的值会将前面的值覆盖掉。
hashmap允许存入null键或值。
标签:hashmap,拉链,哈希,链表,key,HashMap 来源: https://blog.csdn.net/m0_53679492/article/details/121265533
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。