Map

使用map集合

map和Java的一样,都是key-value类型

==但是区别在于map申明以后必须要使用make,让map获得内存==

map的使用:

第一种:

1
2
3
4
5
6
7
8
9
var amap map[string]string
amap = make(map[string]string, 10)
amap["saxon"] = "saxon"
amap["saxon1"] = "saxon"
amap["saxon2"] = "saxon"
amap["saxon3"] = "saxon"
for key,value:=range(amap){
fmt.Println(key,value)
}

第二种:

1
amap:=make(map[string]string,10)

第三种:

1
2
3
amap := map[string]string{
"saxon":"saxon",
}

注意点:

  • 使用map以前,必须要使用make初始化容量,前面一个是类型,后面一个数据是容量,容量不代表长度,里面没有元素,长度就是一
  • map的value可以重复,但是他的键值不可以重复

map的增删改查操作

增加和修改

直接新建一个,如果有这个键的话,那么就是更新,如果不是的话,那么就是修改

1
2
3
4
5
amap := map[string]string{
"saxon":"saxon",
}
amap["saxon"] = "saxon2"
fmt.Println(amap) //saxon2

删除

1
2
delete(amap,"saxon")//map的名字和map的key
amap=make(map[string]string) //使用make新建一个新的map

查找

1
2
3
4
amap := map[string]string{
"saxon":"saxon",
}
value:=amap["saxon"]

如果map集合里面存储的也是一个map,那么我们就应该在把遍历出来的元素在遍历一次

map切片

就是可以动态遍历的map集合

map集合的添加,如果容量固定的话;

由于map是无序的,所以我们便利的时候,他的顺序也是不同的

1
2
3
4
5
6
7
8
amap := map[string]string{
"saxon": "saxon",
"saxon1":"saxon1",
"saxon2":"saxon2",
}
for _,value:=range(amap){
fmt.Println(value)
}

至于为何使用range遍历出来的无序的,在遍历之前,它生成了随机数。用于决定从哪里开始循环迭代。更具体的话就是根据随机数,选择一个桶位置作为起始点进行遍历迭代,因此每次重新 for range map,你见到的结果都是不一样的。那是因为它的起始位置根本就不固定!

map集合使用细节

map集合是引用类型,所以我们给函数传入的对象是一个map的时候,他会修改原来集合的值,因为他会直接修改指针的值

1
2
3
4
5
6
7
8
9
10
11
func main() {
a:=map[string]string{
"0":"saxon",
}
fmt.Println(a)
test08(a)
fmt.Println(a)
}
func test08(a map[string]string) {
a["0"]="0"
}

map集合满了之后,会自动扩容