Golang map 查找

发布于 1周前 作者 yibo5220 最后一次编辑是 5天前 来自 问答

Golang map 查找

Go 语言中 map 采用的是哈希查找表,由一个 key 通过哈希函数得到哈希值,64 位系统中就生成一个 64bit 的哈希值,由这个哈希值将 key 对应存到不同的桶 (bucket)中,当有多个哈希映射到相同的的桶中时,使用链表解决哈希冲突。

细节:key 经过 hash 后共 64 位,根据hmap 中 B 的值,计算它到底要落在哪个 桶时,桶的数量为 2^B,如 B=5,那么用 64 位最后 5 位表示第几号桶,在用

hash 值的高 8 位确定在bucket 中的存储位置,当前 bmap 中的 bucket 未找 到,则查询对应的 overflow bucket,对应位置有数据则对比完整的哈希值,确定是否是要查找的数据。如果当前 map 处于数据搬移状态,则优先从 oldbuckets 查找。

1 回复

在Go语言中,使用map进行查找是非常高效的操作。map是Go中内置的数据结构,它存储键值对(key-value pairs),并且提供了快速的查找、插入和删除操作。当你想从一个map中查找一个特定的键(key)对应的值时,你可以直接使用这个键作为索引来访问它。

示例

假设我们有一个map,它存储了一些学生的ID和他们的姓名,我们想要查找某个特定学生ID的姓名。

package main

import (
    "fmt"
)

func main() {
    // 初始化一个map,键类型为int,值类型为string
    students := map[int]string{
        1: "Alice",
        2: "Bob",
        3: "Charlie",
    }

    // 查找键为2的学生姓名
    if name, ok := students[2]; ok {
        fmt.Println("找到学生:", name)
    } else {
        fmt.Println("未找到学生")
    }

    // 尝试查找一个不存在的键
    if name, ok := students[99]; !ok {
        fmt.Println("未找到ID为99的学生")
    }
}

关键点

  • 使用map[key]语法来查找键对应的值。
  • 查找操作返回两个值:第一个值是键对应的值(如果键存在),第二个值是一个布尔值,表示键是否存在。
  • 如果键不存在,第二个返回值为false,此时第一个返回值的类型会是对应值类型的零值(在这个例子中是空字符串"")。
  • 通过检查第二个返回值(布尔值),你可以确定是否成功找到了键对应的值。

这种方法既简单又高效,是Go中处理map查找时的标准做法。

回到顶部