golang中的map

map的操作特性

1)初始化

map分别支持字面量初始化和内置函数make()的初始化

字面量初始化:

func MapInitByLiteral(){
    m:= map[string] int{
            "apple": 2,
            "banana" : 3,
            }

for k,v:=range m{
        fmt.Printf("%s-%d\n" , k,v)
            }
}

内置函数make()初始化:

func main() {
	m := make(map[string]int, 10)
	m["apple"] = 2
	m["banana"] = 3
	for k , v := range m{
		fmt.Printf("%s-%d\n",k,v)
	}
}

使用make()函数初始化时,可以指定map的容量(也可以不指定)。指定容量可以有效地减少内存分配的次数,有效的利用应用性能。

2)map的增删改查操作

func main() {
	m := make(map[string]int, 10)
	m["apple"] = 2	//	添加操作
	m["banana"] = 3
	for k , v := range m{
		fmt.Printf("%s-%d\n",k,v)
	}
	m["apple"] = 3 //修改操作
	m["doog"] = 12
	delete(m,"apple") //删除操作
	v , exist := m["doog"]	//查询操作
	if exist{
		fmt.Printf("doog - v=%d\n",v)
	}
}

删除元素使用内置函数delete()完成,,delete()没有返回值,在map为nil或指定的键不存在的情况下,delete ()也不会报错,相当于空操作。

在查询操作中,最多可以给两个变量赋值,第一个为值,第二个为bool类型的变量,用于指示是否存在指定的键,如果键不存在,那么第一个值为相应类型的零值。如果只指定一个变量,那么该变量仅表示该键对应的值,如果键不存在,那么该值同样为相应类型的零值。
内置函数len()可以查询map的长度,该长度反映map中存储的键值对数。
 

初始化map时推荐使用内置函数make ()并指定预估的容量。


修改键值对时,需要先查询指定键是否存在,否则 map将创建新的键值对。

查询键值对时,最好检查键是否存在,避免操作零值。


避免并发读写map,如果需要并发读写,则可以使用额外的锁(互斥锁、读写锁),也可以考虑使用标准库sync包中的sync.Map。
 

你可能感兴趣的:(golang,开发语言)