品牌型网站开发,wap网站开发工具,品牌化战略的重要性,深圳 网页设计公司文章目录
一、什么是HashMap HashMap 是一种快速的查找并且插入、删除性能都良好的一种 K/V键值对的数据结构#xff0c;key唯一#xff0c;value允许重复它基于哈希表的 Map 接口实现#xff0c;是常用的 Java 集合之一#xff0c;是非线程安全的。
二、HashMap的数据结…文章目录
一、什么是HashMap HashMap 是一种快速的查找并且插入、删除性能都良好的一种 K/V键值对的数据结构key唯一value允许重复它基于哈希表的 Map 接口实现是常用的 Java 集合之一是非线程安全的。
二、HashMap的数据结构
2.1 数据结构
HashMap的数组结构是数组链表红黑树进行存储。数组类型为Node[]节点。
1.按照key重新计算hash值(让新的哈希值冲突概率更低更散列)
2.按照hash值计算在数组中存储的下标位置
3.判断该下标位置是否存在元素 3.1如果该位置没有保存元素则直接存入当前键值对 3.2如果该位置已经保存元素则以链表方式将当前键值对保存至链表尾部(尾插法) 3.3如果链表长度大于8
为了提供搜索效率(链表不利于搜索)
会将链表转换为红黑树(红黑树有序的自平衡二叉树可以进行二分查找)
注意
HashMap key唯一: 保存的过程中判断key是否一致如果key相同则覆盖 无序: 添加的顺序与存储的顺序不一致输出时按照存储顺序
2.2 解决哈希冲突的方法
如何解决哈希冲突
1、开放定址法我们在遇到哈希冲突时去寻找一个新的空闲的哈希地址
2、再哈希法同时构造多个不同的哈希函数等发生哈希冲突时就使用第二个、第三个……等其他的哈希函数计算地址直到不发生冲突为止。虽然不易发生聚集但是增加了计算时间。
3、链地址法将所有哈希地址相同的记录都链接在同一链表中。
4、建立公共溢出区将哈希表分为基本表和溢出表将发生冲突的都存放在溢出表中。
三、HashMap的扩容方式
扩容方法resize()
扩容机制原数组的2倍