Go中map也是一个映射关系容器,与c++不同的是,c++底层是二叉树实现,Go底层是hash表实现的。
1. map定义
map[keyType]valueType
//定义一个键类型是int,值类型是string的map
var m = map[int]string
- keyType : 键(key)的类型
- valueType : 值(value)的类型
2. 用make函数来初始化map
**注意:**与slice初始化的区别,不需要指定size值,同时cap容量值也不是必须的,但最好估算大概需要的容量,防止后续在动态扩容中浪费大量的内存。
make(map[keyType]valueType, [cap])
//初始化一个容量为10的map
m = make(map[int]string,10)
3. 添加map元素
(1)在声明时添加
package main
import "fmt"
//map
func main(){
m1 := map[string]int{
"青青草原":7,
"我最强":3,
}
m1["蓝天白云"] = 4
m1["还有一个"] = 4
fmt.Println(m1)
}
输出结果:
map[我最强:3 蓝天白云:4 还有一个:4 青青草原:7]
(2)先声明,后添加
package main
import "fmt"
//map
func main(){
var m1 map[string] int
fmt.Println(m1 == nil)//返回true,引用类型,没有初始化
m1 = make(map[string]int,10)
m1["蓝天白云"] = 4
m1["还有一个"] = 4
fmt.Println(m1)
}
输出结果:
true
map[蓝天白云:4 还有一个:4]
(3)注意事项
- 添加时不要添加相同key值:
Go与c++相同,key值不重复,相同的key值,会后面的覆盖前面的value
package main
import "fmt"
//map
func main(){
var m1 map[string] int
fmt.Println(m1 == nil)//返回true,引用类型,没有初始化
m1 = make(map[string]int,10)
m1["蓝天白云"] = 4
m1["还有一个"] = 4
m1["蓝天白云"] = 7//与c++相同,key值不重复,相同的key值,会后面的覆盖前面的value
fmt.Println(m1)
}
输出结果:
true
map[蓝天白云:7 还有一个:4]