map简介
map是一种无序的键值对的集合,键值对在很多编程语言当中都有使用,它是一种数据结构,用于存储和检索数据,一个键对应一个值,键用于标识和访问值。
使用make函数定义map: map_1 := make(map[KeyType]ValueType,initalCapacity)
KeyType是键的类型,ValueType是值的类型,initalCapacity用于设置map的初始容量,也就是存储键值对的数量,当
存储的键值对达到容量时,map会自动扩容,如果不指定initalCapacity,Go语言会根据实际情况选择一个合适的值。
实例:
1.创建一个空map:
m := make(map[int]string)
2.创建一个含有三个键值对的map
m := make(map[int]string){
1:"zhangsan"
2:"lisi"
3:"wangwu"
}
键值对的获取主要依靠键来操作,就好像数据库中的主键一样
获取:a := m[1]
更改:m[1] := "xiaoer"
遍历键值对:for k,v := range m{
fmt.Printf("key=%d,value=%s\n",k,v)
}
删除元素:delete(m,1)
查看键是否存在:b,ok := m[1]
扩展:
map的底层实现是由Hash(哈希表),哈希表是一种根据键(Key)直接访问值(value)的一种数据结构,它通过将
键映射到表中一个位置来访问,以加快查找速度,map底层实现了一种“开放地址法”的哈希实现,就是说当发生哈
希冲突时,他会继续寻找下一个槽位,直到找到可用槽位为止,也就是说Go语言map底层实现使用两个数组,一个
存储键,一个存储值,当需要添加一个键值对的时候先计算出键的哈希值,然后根据哈希值找到槽位,如果该槽位为空,则将键值存储在对应槽位,否则继续寻找下一个槽位,直到找到一个空槽位为止