[go]map基本使用和底层原理
1、map基本使用
map声明
var m4 map[int]int //只是声明 没有开辟空间
m4[1]=100 //报错
log.Println(m4)
创建
//1
m3:=make(map[int]string,100) //可以指定长度
log.Println(len(m3)) //0 键值对的数量
m2:=make(map[string]string) //使用默认长度
m2["你"] = "你好啊"
log.Println(m2)
//2
d2 :=map[string]int{"one":1, "tow":2} //初始化
d3 :=map[int]int{} //创建了空map
判断值是否存在
只接受一个的话默认返回的是value,两个的话有exists
//判断是否存在
val,exists :=d3["tow"] //如果不存在 返回零值 exists为false
map遍历
m5:=map[string]string{"one":"1","tow":"2","three":"3"}
for k:=range m5{ //默认是key
log.Println(k) //one tow...
}
for k,v:=range m5{ //k-v
log.Println(k,v) //
}
删除
m5:=map[string]string{"one":"1","tow":"2","three":"3"}
delete(m5, "one")
2、map和set
go没有内置set类型,但是可以用map很轻松模仿,因为map的key是唯一的
type StrSet struct {
data map[string]bool
sync.RWMutex //读写锁 保证线程安全
}
func New() *StrSet {
return &StrSet{
data: make(map[string]bool),
}
}
func (this *StrSet)Add(val string) {
this.Lock()
defer this.Unlock()
if this.data==nil{
this = New()
}
this.data[val] = true
}
func (this *StrSet)Delete(val string) {
this.Lock()
defer this.Unlock()
if this.data==nil{
return
}
delete(this.data,val)
}
func (this *StrSet) IsExist(val string) bool {
this.RLock()
defer this.RUnlock()
if this.data==nil{
return false
}
_,ok:=this.data[val]
return ok
}
func (this *StrSet) GetAll() (result []string) {
if this.data==nil{
return
}
for val :=range this.data{
result = append(result, val)
}
return
}
func (this *StrSet) Clear() {
this.Lock()
defer this.Unlock()
this.data = map[string]bool{}
}
func main() {
s:=New()
s.Add("panbin")
s.Add("biningo")
s.Add("a")
s.Add("b")
s.Add("panbin")
log.Println(s.GetAll())
}
3、map底层结构
借鉴了如下博客。写的很好
先来观摩一波map底层结构,第一眼肯定万脸懵逼
[go]map基本使用和底层原理的更多相关文章
- 红黑树规则,TreeSet原理,HashSet特点,什么是哈希值,HashSet底层原理,Map集合特点,Map集合遍历方法
==学习目标== 1.能够了解红黑树 2.能够掌握HashSet集合的特点以及使用(特点以及使用,哈希表数据结构) 3.能够掌握Map集合的特点以及使用(特点,常见方法,Map集合的遍历) 4.能够掌 ...
- HashMap的底层原理
简单说: 底层原理就是采用数组加链表: 两张图片很清晰地表明存储结构: 既然是线性数组,为什么能随机存取?这里HashMap用了一个小算法,大致是这样实现: // 存储时: int hash = ke ...
- Servlet底层原理、Servlet实现方式、Servlet生命周期
Servlet简介 Servlet定义 Servlet是一个Java应用程序,运行在服务器端,用来处理客户端请求并作出响应的程序. Servlet的特点 (1)Servlet对像,由Servlet容器 ...
- 深入源码分析SpringMVC底层原理(二)
原文链接:深入源码分析SpringMVC底层原理(二) 文章目录 深入分析SpringMVC请求处理过程 1. DispatcherServlet处理请求 1.1 寻找Handler 1.2 没有找到 ...
- HashMap底层原理分析(put、get方法)
1.HashMap底层原理分析(put.get方法) HashMap底层是通过数组加链表的结构来实现的.HashMap通过计算key的hashCode来计算hash值,只要hashCode一样,那ha ...
- Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理
Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理 2017年01月04日 08:52:12 阅读数:18366 基于Lucene检索引擎我们开发了自己的全文检索系统,承担起后台PB ...
- Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL
Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL 1.1. $ 美元字符, php 黑头1 1.2. 默认变量的范围和声明:1 1.3 ...
- HashMap的底层原理(jdk1.7.0_79)
前言 在Java中我们最常用的集合类毫无疑问就是Map,其中HashMap作为Map最重要的实现类在我们代码中出现的评率也是很高的. 我们对HashMap最常用的操作就是put和get了,那么你知道它 ...
- Java面试底层原理
面试发现经常有些重复的面试问题,自己也应该学会记录下来,最好自己能做成笔记,在下一次面的时候说得有条不紊,深入具体,面试官想必也很开心.以下是我个人总结,请参考: HashSet底层原理:(问了大几率 ...
随机推荐
- Wireshark过滤器写法总结
目录 #Wireshark提供了两种过滤器: 1.捕获过滤器 2.显示过滤器 #过滤器具体写法 #显示过滤器写法 #捕捉过滤器写法 #Wireshark提供了两种过滤器: 1.捕获过滤器 捕获过滤器: ...
- Python基础篇_实例练习(二)
问题1:假设有同学A,A每周在工作日进步,周末退步,问一年(365天)后A同学是一年前的几倍? 工作日进步由用户输入,周末下降0.01即1% deyup = eval(input()) deyfact ...
- Servlet(简介,请求参数,页面跳转,生命周期,创建,配置,ServletContext,线程)
1.Servlet简介 servlet是java servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序, 主要功能在于交互式浏览和修改数据,生成动态的web内容 服务端运行的 ...
- redis相关命令及应用场景
Redis的应用场景 (1) 配合关系型数据库做高速缓存 l 高频次,热门访问的数据,降低数据库IO l 高频次,热门访问的数据,降低数据库IO (2) 由于其拥有 ...
- 带修主席树 洛谷2617 支持单点更新以及区间kth大查询
题目链接:https://www.luogu.com.cn/problem/P2617 参考博客:https://blog.csdn.net/dreaming__ldx/article/details ...
- 北京大学公开课《数据结构与算法Python版》
之前我分享过一个数据结构与算法的课程,很多小伙伴私信我问有没有Python版. 看了一些公开课后,今天特向大家推荐北京大学的这门课程:<数据结构与算法Python版>. 课程概述 很多同学 ...
- 题解 P4344 【[SHOI2015]脑洞治疗仪】
前言 这道题目呢,看上去很难,实际上我们可以用线段树解决这道题目. 正文 我们维护 sum.len.tag.lmax.rmax.ans. sum 就是这段区间非脑洞的个数 len 就是这段区间的长度 ...
- 【2019沈阳网络赛】G、Special necklace——自闭的物理题
这道题让我差点怀疑自己高考没考过物理 题意中 he measures the resistance of any two endpoints of it, the resistance values ...
- 99%的程序员都在用Lombok,原理竟然这么简单?我也手撸了一个!|建议收藏!!!
罗曼罗兰说过:世界上只有一种英雄主义,就是看清生活的真相之后依然热爱生活. 对于 Lombok 我相信大部分人都不陌生,但对于它的实现原理以及缺点却鲜为人知,而本文将会从 Lombok 的原理出发,手 ...
- 北邮OJ-257- 最近公共祖先-软件14 java
思路分析:思路应该比较简单也很容易想的来,就是比较两个节点的最近的祖先节点,要对每个节点依次记录下他的所有祖先节点,包括其自己,因为自己也算自己的祖先节点,这一点题目中没有明确指出 所以比较坑. 我们 ...