java散列表(hash table)工作原理笔记

散列表是什么?

就是元素为链表的数组。

存值

已Map为例子,Map的Entry就是一个链表实现,主要属性为,key,value,nextnext就是链表下一个对象。
1.计算key,hash值
2.hash值对数组长度取模,得到下标
3.取出下标对应链表,若为空新建Entry对象。
4.不为空,判断key是否相等(key hash值碰撞,key对象相等判断),若相等成立,替换value值。
5.不相等,判断链表长度是否超过临界值(计算得,跟偏移量有关)。
6.不超过,添加新Entry对象,关联上一个Entry对象
7.超过,扩容数组,调整已有数据,重新执行一遍添加流程。

取值

1.计算key,hash值
2.hash值对数组长度取模,得到下标
3.取出下标对应链表,若为空 返回null
4.不为空,遍历该列表,查询相等key
5.有,返回value结束查询
6.没有,到链表末尾都无匹配项,返回null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值