当前位置: 首页 > news >正文

第二十六:Map的基本原理

哈希扩容的方式有:

map数据结构底层详解 - failymao - 博客园

一: 双倍扩容

二:增量式扩容

三:等量扩容

5. 渐进式扩容

5.1 扩容的前提条件

为了保证访问效率,当新元素将要添加进map时,都会检查是否需要扩容,扩容实际上是以空间换时间的手段。
触发扩容的条件有二个:

  1. 负载因子 > 6.5时,也即平均每个bucket存储的键值对达到6.5个。
  2. overflow数量 > 2^15时,也即overflow数量超过32768时。

5.2 增量扩容

当负载因子过大时,就新建一个bucket,新的bucket长度是原来的2倍,然后旧bucket数据搬迁到新的bucket。
考虑到如果map存储了数以亿计的key-value,一次性搬迁将会造成比较大的延时,Go采用逐步搬迁策略,即每次访问map时都会触发一次搬迁,每次搬迁2个键值对。

5.3 等量扩容

所谓等量扩容,实际上并不是扩大容量,buckets数量不变,重新做一遍类似增量扩容的搬迁动作,把松散的键值对重新排列一次,以使bucket的使用率更高,进而保证更快的存取。

在极端场景下,比如不断地增删,而键值对正好集中在一小部分的bucket,这样会造成overflow的bucket数量增多,但负载因子又不高,从而无法执行增量搬迁的情况

相关文章:

  • VM虚拟机安装及Ubuntu安装配置
  • Nacos操作指南
  • I/O进程(全)
  • RGBD惯性SLAM
  • 电弧光的危害有哪些?我们该如何应对?
  • 分布式热点网络
  • 汽车零部件产线节能提效,工业网关解锁数据采集 “密码”
  • 音乐产业新玩法:NFTs如何颠覆传统与挑战未来?
  • JAVA身份证件图像识别(100%可以用)
  • Python 实现的运筹优化系统数学建模详解(多目标规划模型)
  • 报错:Nlopt
  • DICOM通讯(ACSE->DIMSE->Worklist)
  • STM32电机库 电机控制特性
  • 计算机网络(第四章)
  • TiDB 部署指南(单机模式) CentOS 7 安装 MariaDB 教程
  • 弱口令爆破
  • 亚马逊发货系统突发限制,卖家如何破局?
  • 转发表和路由表的差别
  • 详解关于VS配置好Qt环境之后但无法打开ui界面
  • Logisim——1位比较器,2位比较器,4位无符号比较器,16位无符号比较器(头歌平台实测通过)
  • 成都一季度GDP为5930.3亿元,同比增长6%
  • 目前中美未进行任何经贸谈判,外交部、商务部再次表明中方立场
  • 集合多家“最美书店”,松江成立书店联盟“书香满云间”
  • 拍片无小事,牙齿也有故事
  • 宜昌为何能有一批世界级农业:繁育虫草养殖鲟鱼,柑橘魔芋深耕大健康
  • 长三角与粤港澳大湾区融合发展,无锡何以成为窗口?