当前位置: 首页 > 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数量增多,但负载因子又不高,从而无法执行增量搬迁的情况

http://www.dtcms.com/a/132101.html

相关文章:

  • 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位无符号比较器(头歌平台实测通过)
  • Kubernetes Operator 是什么,以及它们的用途
  • Docker 与 Podman常用知识汇总
  • tmpfs的监控筛选/dev/shm下的shmem创建
  • Linux——基础开发工具
  • 【第43节】实验分析windows异常分发原理
  • 低功耗设计:Level Shift的种类(以SAED EDK 32/28nm工艺库为例)
  • ubuntu上,e1000e,i1210有线网卡驱动安装
  • 从暴力到动态规划再到双指针:使用 Java 探索接雨水问题的不同解法
  • 处理Long类型长度超长导致前端精度丢失问题
  • Python用户管理系统深度解析(附源码):从类设计到安全实现的完整指南