哈希表底层实现

数据结构的物理存储结构只有两种:顺序存储结构链式存储结构
哈希表使用数组作为主干,实现查找,插入,删除元素的时间复杂度为O(1)。

哈希表(key,value) 就是把Key通过一个固定的算法函数既哈希函数转换成一个整型数字,然后将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里。(把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。)
使用哈希表进行查询的时候,再次使用哈希函数将key转换为对应的数组下标,并定位到该空间获取value,当多个键被哈希到同一个下标时,处理哈希碰撞冲突。

哈希冲突处理方法:
开放定址法
链地址法

扩容:HashMap构造方法并没有对内部的table数组初始化,可能是为了防止未使用的情况下浪费内存。当初次执行插入,如果数组为空就会初次调用扩容方法resize()创建table数组。
如果未指定HashMap的构造方法参数,数组初始长度为DEFAULT_INITIAL_CAPACITY(16),加载因子为DEFAULT_LOAD_FACTOR(0.75)。开发者也可以通过HashMap的构造方法指定初始长度和加载因子。

HashMap的容量超过当前数组长度*加载因子,就会执行resize()算法,该算法将创建一个新的数组,长度是原来的两倍(旧的长度左移一位),并且将原来的HashMap数组的节点转换到新的数组。同时threshold变量也会是原来的两倍,该变量用来判断HashMap在插入后是否应该扩容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值