Golang map 查找
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
查找时的标准做法。