Go map的底层实现时hash table,根据key查找value的时间复杂度时O(1)
Go的初始化
var m map[string]int //声明map,指定key和value的数据类型
m = make(map[string]int) //初始化,容量为0
m = make(map[string]int, 200) //初始化,容量为5。强烈建议初始化时给一个合适的容量,减少扩容的概率
m = map[string]int{"语文": 0, "数学": 39} //初始化时直接赋值
添加和删除key
- m[“英语”] = 59 //往map里添加key-value对
- m[“英语”] = 70 //修改 会进行覆盖之前的值
- delete(m,"数学") //从map里删除key-value
- len(m) //获取map的长度
- go不支持对map上执行cap函数
根据key找value
- 读取key对应的value,如果key不存在,则返回value类型的默认值 value:=m["数学"]
- 取key对应的value建议使用这种方法,先判断key是否存在
if value,exists := m["语文"];exists{
fmt.Println(value)
}else{
fmt.Println("map里不存在[语文]这个key")
}
遍历map
for key,valuee := range m {
fmt.Printf("%s=%d\n",key,value)
}
例子
var m map[string]int
fmt.Println(len(m))
m = make(map[string]int)
fmt.Println(len(m))
m = make(map[string]int, 3)
fmt.Println(len(m))
m = map[string]int{"A": 3, "B": 2}
fmt.Println(len(m))
m["D"] = 18
fmt.Println(len(m))
for key, value := range m {
fmt.Printf("key : %s , value : %d \n", key, value)
}
delete(m, "D")
for key, value := range m {
fmt.Printf("key : %s , value : %d \n ", key, value)
}
va, ok := m["A"]
if ok {
fmt.Println(va)
} else {
fmt.Println("no value ")
}