栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

散列表(4)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

散列表(4)

散列表也叫哈希表,提供key-value的映射关系通过hash(key)找到所匹配的value,时间复杂度接近于o(1)底层是一个数组 散列表的写put操作

在数组中插入一个个entry: 通过hash函数转化为数组的下标index, 但当插入的entry越来越多时,获取的下标可能是相同的,就会出现hash冲突, 解决的办法有:

开放地址法
当我们插入一个新的entry时如果发现当前位置已经被占用,可以按照某种寻址法去找另外的空档位置链表法
hashmap数组中每个元素存储的是一个链表的头结点:当新来的entry映射到与之冲突的数组位置时就直接插入到当前位置的链表即可 散列表的读get操作

通过哈希函数得到数组下标index通过index找到对应元素。如果当前元素不是想要的value,可以顺着当前链表往下找 散列表的扩容

为什么要进行扩容?
当插入很多entry之后,散列表会达到一定的饱和度,发生哈希冲突的概率会提高,某个位置的链表会很长,从而影响查询效率,就需要扩容来缓解

扩容的条件
当hash table的长度>当前的长度*负载因子(0.75)

如何扩容

    创建一个新的entry数组,长度是原来的2倍重新hash:遍历源entry数组,把所有的entry 重新hash到新的数组当中
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/756171.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号