golang中映射

本文介绍了Go语言中的映射数据结构,它是一种基于键的无序数据集合,使用哈希表实现,允许快速检索。Go语言的映射不需要额外引入库,可以通过make函数或映射字面量进行初始化。映射的键值对数量可以动态增长,键必须满足可比较性。在函数间传递映射会传递引用,修改映射会影响到所有引用。文章还讨论了映射与切片的区别,以及如何使用内置函数len和cap操作映射和切片。
摘要由CSDN通过智能技术生成

映射是一种数据结构,用于存储一系列无序的键值对,映射基于键来储存值,映射功能强大的地方是,能基于键快速检索数据,键就像索引一样,指向与该键关联的值。

与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": &#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值