AI 助理
备案 控制台
开发者社区 开发与运维 文章 正文

学习golang(2) 初探:go map 基本使用

简介: 学习golang(2) 初探:go map 基本使用

什么是hash


hash表小栗子

hash表在数据结构中被称之为散列表hash在编程中用的非常多,可见之重要。

为什么很重要呢,我们来举个例子

加入我们有如下数据

image.png

假设要查询数据为26的元素,你会怎么查询呢?

最简单的是 直接从 10、1、2...26 查询 6次查到数据 26 对吧

那么还有没有什么查询方法呢? 有的,我们可以定义一个函数,接收数据,函数返回的是 (数据 % 10)

这样,我们直接调用 函数就可以直接得到数据了,hash表正是做这样的事情的。



hash 表定义


那么什么是hash表hash 表可以通过key来直接访问数据的数据结构,而我们上述定义的函数称之为 哈希函数哈希函数 可以理解为 将数据映射为一个表,我们直接访问表中的位置,从而直接访问数据。


例如如上例子

我们hash表

image.png

我们的 哈希函数num % 10,num为我们要查询的数,通过函数我们能够直接得到下标,从而得到数据是否存在。



hash map 解决冲突的几种方式


为什么会有hash冲突

借上述例子


image.png

我们再插入一个 11 ,我们使用 哈希函数 应该插在 key 为 1 的位置

image.png

我们发现,一个key对应多个值,我们到底应该判断哪个呢? 这个其实就是哈希冲突

如何避免hash冲突呢?



解决冲突方法


拉链法

我们可以给每个数组的value都定义一条链表,当遇到冲突的时候,直接新增一个节点就成了,例如,我们在上面的hash表中插入 11 , 若使用拉链法,我们得到的结果可以是这样的。

image.png

开放定址法


当hash冲突时,就去寻找离它最近的空的地址,有空的便存下,只要我们hash表足够大,我们就能够找到并且将数据存下。


其中这里又分为 线性探测 和 二次探测,就不多讲了

例如我们已经有如下hash表了


image.png

若我们再存入 22,按照哈希函数,它应当存在 key2的位置,但是改地址已经有值了,所以,它找一个离它最近的空间,比如 下标为3这个为空的,就可以放进来

image.png

若此时,我们插入13数据呢,同样的到底,它会找后面空的位置,即5


image.png

当查询的时候也一样,当查询不到的时候,顺着往后查找即可



建立公共溢出区

这种方法,先创建哈希表 和 公共溢出区表,先存hash表,若发生冲突了,则存公共溢出区区,查询亦然。



go map 语法


创建map

我们可以使用make或者直接定义map

image.png

我们如上使用了

map1 := map[int]int{}var map2 = make(map[int]int)创建了 map1map2

其中,map[key的类型]值的类型 ,这个需要指定才行

我们运行一下程序看看

使用: go run main.go

image.png


访问map

我们可以直接通过key来访问元素数据,例如,我们想求 map1[0]map2[1] 数据,我们可以这样写

image.png

我们执行一下,查看能否获取数据呢

image.png


遍历map

我们可以使用for k,v := range map 的形式来遍历map,例如,我们遍历一下 map1

image.png


注意,map是输出是无序的,我们尝试多输出几次

image.png


删除map元素

我们可以直接使用delete删除map元素,例如

image.png


我们尝试执行一下

image.png

可见,key: 1已经被删除了



判断map是否存在

我们可以使用 _ , ok := map1[key]

若存在,则oktrue,若不存在,okfalse

image.png

我们尝试下

image.png



map小实验


我们写个小程序,来做一下map的实验,该实验是统计文件单词的个数

例如,有如下文件

image.png


写起来不难,我们看看

image.png


我们尝试运行输出以下

image.png

若想要排序,直接使用sort即可(偷懒了偷懒了)

image.png



思考


关于go map就这样吧,本来想看看go map 底层的,结果我找了一下资料,也看了一部分源码,奈何自身强度不行,看不懂,只得暂时搁置,后面把go基础看完了,再回过头来看底层源码吧,加油,运维小学生。



山水怡情
目录
相关文章
1603458909890196
|
26天前
|
缓存 NoSQL Go
通过 SingleFlight 模式学习 Go 并发编程
通过 SingleFlight 模式学习 Go 并发编程
1603458909890196
32 0
智能计算老群群
|
12天前
|
编译器 Go
go语言学习记录(关于一些奇怪的疑问)有别于其他编程语言
本文探讨了Go语言中的常量概念,特别是特殊常量iota的使用方法及其自动递增特性。同时,文中还提到了在声明常量时,后续常量可沿用前一个值的特点,以及在遍历map时可能遇到的非顺序打印问题。
智能计算老群群
32 8
尹正杰
|
18天前
|
Go
golang语言之go常用命令
这篇文章列出了常用的Go语言命令,如`go run`、`go install`、`go build`、`go help`、`go get`、`go mod`、`go test`、`go tool`、`go vet`、`go fmt`、`go doc`、`go version`和`go env`,以及它们的基本用法和功能。
尹正杰
26 6
尹正杰
|
18天前
|
存储 Go
Golang语言基于go module方式管理包(package)
这篇文章详细介绍了Golang语言中基于go module方式管理包(package)的方法,包括Go Modules的发展历史、go module的介绍、常用命令和操作步骤,并通过代码示例展示了如何初始化项目、引入第三方包、组织代码结构以及运行测试。
尹正杰
19 3
1387503158665997
|
20天前
|
Rust Linux Go
Rust/Go语言学习
Rust/Go语言学习
1387503158665997
34 0
wljslmz
|
21天前
|
Go 开发者
Golang字符串文字:深入理解Go语言中的字符串处理
【8月更文挑战第31天】
wljslmz
9 0
wljslmz
|
21天前
|
Go 开发者
什么是 Golang 包?详解 Go 语言的包系统
【8月更文挑战第31天】
wljslmz
30 0
1288912195458132
|
25天前
|
存储 Go 容器
Go从入门到放弃之map(字典)
Go从入门到放弃之map(字典)
1288912195458132
7 0
热爱技术的小郑
|
1月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
热爱技术的小郑
32 1
java集合框架复习----(4)Map、List、set
热爱技术的小郑
|
1月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
热爱技术的小郑
33 3

热门文章

最新文章

  • 1
    使用golang编写prometheus metrics exporter
  • 2
    Gin vs Beego: Golang的Web框架之争
  • 3
    Golang之并发
  • 4
    golang和java对比
  • 5
    Golang环境搭建指南(Windows和linux)
  • 6
    Golang Context 详细原理和使用技巧
  • 7
    Golang协程:并发编程的利器
  • 8
    golang slice的扩容给你整明白的
  • 9
    Golang中select的四大用法
  • 10
    Golang:strings模块常用的字符串操作函数
  • 1
    JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(二)
    38
  • 2
    JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(一)
    24
  • 3
    vue 百度地图开发【教程】1. 绘制百度地图(不使用 vue-baidu-map,解决 BMap is undefined)
    184
  • 4
    vue-baidu-map 绘制行政区划的轮廓,添加行政区划名称(含给覆盖物添加点击事件)——vue 百度地图开发
    129
  • 5
    vue-baidu-map 报错 | map is undefined
    46
  • 6
    vue-baidu-map 报错 | BMap is undefined
    63
  • 7
    vue-baidu-map 自定义地图主题
    149
  • 8
    vue-baidu-map 百度地图检索、获取坐标
    28
  • 9
    DOM 属性列表(命名节点图 Named Node Map)
    24
  • 10
    C++一分钟之-扁平化映射与unordered_map
    45
  • 相关课程

    更多
  • Go语言核心编程 - 数据结构和算法
  • Go语言核心编程 - 基础语法、数组、切片、Map
  • Go语言核心编程 - 面向对象、文件、单元测试、反射、TCP编程
  • Go语言完全自学手册图文教程
  • Python 脚本进阶
  • Scala核心编程 - 进阶
  • 相关电子书

    更多
  • Go语言路上踩过的坑
  • gohbase :HBase go客户端
  • Go构建日请求千亿级微服务实践
  • 相关实验场景

    更多
  • 使用Aliyun Java Intializr进行项目开发
  • 推荐镜像

    更多
  • golang
  • nodejs-release
  • python-release
  • 下一篇
    搭建自己的私有云盘工具总结

    玻璃钢生产厂家玻璃钢雕塑安装方法永城商场美陈造景仙林商场秋季美陈春季美陈商场江西省玻璃钢雕塑定制泉州玻璃钢广场雕塑厂家供应陕西玻璃钢美陈雕塑四川室内商场美陈厂家供应成都公园主题玻璃钢卡通雕塑平桥玻璃钢雕塑鼎湖玻璃钢抽象雕塑批发景洪市玻璃钢雕塑设计如何玻璃钢珍珠贝壳雕塑河南节庆商场美陈价格上海艺术商场美陈厂家供应知名玻璃钢卡通雕塑设计扬州园林景观玻璃钢雕塑萍乡环保玻璃钢雕塑供应商山东卡通玻璃钢动物鹿雕塑人物玻璃钢雕塑厂家批发武平玻璃钢花盆花器玻璃钢艺术雕塑定制多少钱商场购物中心秋季美陈江苏大型商场美陈供应芜湖玻璃钢雕塑制造厂家玻璃钢雕塑神像有哪些关于商场美陈的网站上海拿包老板玻璃钢雕塑福清玻璃钢艺术雕塑广州创意玻璃钢雕塑联系方式香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

    玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化