映射是一种数据结构,用于存储一系列无序的键值对,映射基于键来储存值,映射功能强大的地方是,能基于键快速检索数据,键就像索引一样,指向与该键关联的值。
与C++,JAVA不一样,go使用映射map不需要引入任何库。
因为映射也是一个数据集合,所以也可以使用类似处理数组和切片的方式来迭代映射中的元素。但映射是无序集合。所以即使以同样的书序保存键值对,每次迭代映射时,元素顺序也可能不一样,无序的原因是映射的实现使用了散列表。
go语言中的map在底层是用哈希表实现的,在goroot/src/pkg/runtime/hashmap/go可以查看他的实现细节,go语言的map是一个hash数组列表,而不是想C++一样使用红黑树,与传统的hashmap一样,go语言的map由一个bucket组成
列表中的每一个元素都被称为bucket的结构体,每个backet可以保存8个键值对,所以元素将被hash算法跳入到数组的bucket中,bucket填满后,将通过一个overflow指针来扩展一个bucket,从未形成链表,以此解决hash冲突问题,简单来说,map就是一个bucket指针型的一堆数组,每个bucket指针下面则不定长,可能挂着bucket指针list
go语言创建并初始化映射有很多方法,使用内置的make函数或者使用映射字面量都是最常见的办法
//创建一个映射,键的类型是string,值的类型是int
dict :=make(map[string]int)
//创建一个映射,键和值的类型都是string
//使用两个键值对初始化映射
dict := map[string]string{"red": &#