JDK中hashmap实现机制

软件中时间效率是一项衡量软件质量的关键指标,数据读入与查询是软件中做常用的操作。JDK1.8中hashMap是采用hash表存数据,使用hash表能够大大增强数据的查询效率。
hash表:是一个键值对(key,value),通过hash函数能够快速的找到所需的数据,即通过一个函数function(key)计算即可找到数据。
hash函数:hash函数算法属于商业型公司的核心资产,严格保密,一般使用者会用即可。如果hash函数做的特别好,数据散列无冲突,则需计算一次就可以找到相应的数据。
hash冲突:再好的hash函数,也会发生hash冲突。所谓的hash冲突就是根据key值计算出来的数据不是一个,而是两个或两个以上。

JDK1.7解决hash冲突的数据结构:数组+链表,如下图
在这里插入图片描述
这时查找数据时,通过哈希函数key值找到第一个数据后,进行比对,如果第一个数据不是所要的数据,沿着链表全局扫描,直到数据匹配为止。

JDK1.8解决hash冲突的数据结构:数组+链表+红黑树。jdk1.7在hash冲突时使用链表来解决冲突,如果要查找的数据在链表的最后一个,加入链表有n个结点,则需要比对n次。jdk1.8对此进行改进,当冲突数据结点小于8个时,使用链表,当大于8个时,则数据结构变为红黑树,因为使用排序树查找时速度要快很多。如下图所示:
在这里插入图片描述
为什么要用红黑树 :通过排序树查找数据时,查找的次数和树的高度有关,在排序树中平衡二叉树的高度最低,也就是平衡二叉树查找效率最高,但是维护这个平衡二叉树的算法复杂,如增加一个数据节点,让这个树继续成为平衡二叉树需要做多次指针变换操作。红黑树是研究人员给出来的一种数据结构,这种数据结构类似与平衡二叉树,但不完全是平衡二叉树,它具有平衡二叉树同样的查找性能,同时维护平衡二叉树简单,最多经过三次旋转(结点之间的指针变换)即可完成红黑树的维护,至于为什么最多经过三次旋转即可达到平衡,有严格的数学证明过的。

文中图片来自 https://blog.csdn.net/zhouxcwork/article/details/81631399

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值