Go学习之旅之map小结(1)|Go主题月

141 阅读1分钟

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]