LingKangSg的go学习日记7之map索引如何查找

本文介绍了两种数据结构实现方法——开放寻址法和拉链法,重点讲解了拉链法中基于数组和链表的实现,以及源码中的mapaccess1核心计算逻辑,涉及散列函数、哈希值计算和使用掩码进行索引定位。同时提到值复制在该过程中的作用。
摘要由CSDN通过智能技术生成

一般有两种方式:开放寻址法和拉链法。最常用的当属拉链法了,基于数组+链表实现,先使用散列函数将键key映射到数组索引(如:计算hash值,并按数组长度取模),因为不同的键key可能映射到同一个数组索引,所以多个键值对形成链表。

源码中,mapaccess1核心计算逻辑:

b := (*bmap)(add(h.buckets, (hash&m)*uintptr(t.bucketsize)))

用来获得桶数组索引地址,hash&m进行二进制与操作(全为1才为1)相当于h % m, 得到一个小于等于m的值,然后乘以每个数组元素的内存大小计算出对应index的地址偏移量

tips:

m掩码全为1, 比如11,即可根据hash二进制取0-3,类似mod

tips:

range 是值复制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值