Java哈希表

1.什么是哈希表?

哈希表(Hash Table)的是数组与链表/二叉树的结合,其中哈希是指哈希函数。

哈希函数的主要功能是将一个值经过加工而得到另外一个值。这种函数的特点就是输出的空间远小于输入的空间

2.哈希表的存储方式

哈希表是数组+链表/二叉树的方式来实现的数据结构。其中数组的下标就是由哈希函数计算得到的结果。下标对应的位置存储的就是一个键值对。

3.哈希冲突

同的数据输入哈希函数后可能得相同的结果,此时称为哈希冲突。

解决哈希冲突的办法:开放寻址法拉链法

开放寻址法:寻找空白的位置插入,相关的方法有线性探测 、二次探测 、再哈希法。java中的ThreadLocal就是采用了开放寻址法

拉链法:在哈希值相同的地方形成一个链表/二叉树。对于Java中的HashMap,当链表长度超过8时链表会转化成树结构,提升性能。

4.哈希表的扩容

 当哈希表的位置被占的比较多的时候,更容易出现哈希冲突。因此引入了增长因子的概念。

增长因子是被占的位置和所有位置的百分比,当这个百分比达到时,就触发扩容。而且这个扩容也不是简单的把数组扩大,而是新创建一个数组是原来的2倍,然后把原数组的所有键值对都重新Hash一遍放到新的数组。因为数组扩大了,所以一般哈希函数也会有变化,这里的Hash也就是把之前的数据通过新的哈希函数计算出新的位置来存放。

参考文章:

https://blog.csdn.net/sinat_33921105/article/details/103344078?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163553577316780269818039%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163553577316780269818039&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-103344078.first_rank_v2_pc_rank_v29&utm_term=%E5%93%88%E5%B8%8C%E8%A1%A8&spm=1018.2226.3001.4187

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值