hashMap的数据结构

图片描述

在jdk8中,HashMap是用了数组和链表以及红黑树这三种数据结构

首先,在hashmap类中,都有一个table数组,我们在存储数据时,对这个数据的hash值进行一系列的计算 计算出它在Table中的位置(下标),并将它存放进去
然而,我们在hashmap是什么 中提到,不同的对象的Hash值可能相同,那么相同的Hash值会导致不同的数据在数组中有相同的存储位置,我们虽然创造了一系列的解决办法,但并不能完全的避免这种冲突,那么,当产生冲突时,hashmap是怎样解决的呢?
当产生冲突时,如data1和data2 ,我们把data2放在data1后的列表中,这样就不会因为哈希值的冲突而对数据产生影响。
1.时间复杂度
我们知道,当某条链表的长度大于8时,就会将其转换为红黑树。遍历一条链表的时间复杂度O(n),当一条链表过长时,遍历这条链表可能会花很长时间,而遍历一颗红黑树的时间复杂度为O(logn),从而减少了插入或查找的时间
2.红黑树
简单总结下红黑树是什么:一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。

也就是说,红黑树是一种相对平衡的查找二叉树,这使他不仅便于查找,也便于插入和删除,这对于既需要插入也需要查找的HashMap是非常有利的

下一节:数据哈希值的计算和在table中的存储位置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值