散列表是什么?
就是元素为链表的数组。
存值
已Map为例子,Map的Entry就是一个链表实现,主要属性为,key,value,next。next就是链表下一个对象。
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
本文深入浅出地介绍了散列表的基本概念及其工作原理。通过具体的存取值步骤解析,帮助读者理解散列表如何通过计算哈希值来定位元素,并在发生哈希冲突时采用链表解决方法。此外还涉及了散列表的扩容机制。
5610

被折叠的 条评论
为什么被折叠?



