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底层结构

借鉴了如下博客。写的很好

深入Go的Map使用和实现原理

先来观摩一波map底层结构,第一眼肯定万脸懵逼

[go]map基本使用和底层原理的更多相关文章

  1. 红黑树规则,TreeSet原理,HashSet特点,什么是哈希值,HashSet底层原理,Map集合特点,Map集合遍历方法

    ==学习目标== 1.能够了解红黑树 2.能够掌握HashSet集合的特点以及使用(特点以及使用,哈希表数据结构) 3.能够掌握Map集合的特点以及使用(特点,常见方法,Map集合的遍历) 4.能够掌 ...

  2. HashMap的底层原理

    简单说: 底层原理就是采用数组加链表: 两张图片很清晰地表明存储结构: 既然是线性数组,为什么能随机存取?这里HashMap用了一个小算法,大致是这样实现: // 存储时: int hash = ke ...

  3. Servlet底层原理、Servlet实现方式、Servlet生命周期

    Servlet简介 Servlet定义 Servlet是一个Java应用程序,运行在服务器端,用来处理客户端请求并作出响应的程序. Servlet的特点 (1)Servlet对像,由Servlet容器 ...

  4. 深入源码分析SpringMVC底层原理(二)

    原文链接:深入源码分析SpringMVC底层原理(二) 文章目录 深入分析SpringMVC请求处理过程 1. DispatcherServlet处理请求 1.1 寻找Handler 1.2 没有找到 ...

  5. HashMap底层原理分析(put、get方法)

    1.HashMap底层原理分析(put.get方法) HashMap底层是通过数组加链表的结构来实现的.HashMap通过计算key的hashCode来计算hash值,只要hashCode一样,那ha ...

  6. Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理

    Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理 2017年01月04日 08:52:12 阅读数:18366 基于Lucene检索引擎我们开发了自己的全文检索系统,承担起后台PB ...

  7. Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL

    Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL 1.1. $ 美元字符, php 黑头1 1.2. 默认变量的范围和声明:1 1.3 ...

  8. HashMap的底层原理(jdk1.7.0_79)

    前言 在Java中我们最常用的集合类毫无疑问就是Map,其中HashMap作为Map最重要的实现类在我们代码中出现的评率也是很高的. 我们对HashMap最常用的操作就是put和get了,那么你知道它 ...

  9. Java面试底层原理

    面试发现经常有些重复的面试问题,自己也应该学会记录下来,最好自己能做成笔记,在下一次面的时候说得有条不紊,深入具体,面试官想必也很开心.以下是我个人总结,请参考: HashSet底层原理:(问了大几率 ...

随机推荐

  1. Web Scraper 高级用法——利用正则表达式筛选文本信息 | 简易数据分析 17

    这是简易数据分析系列的第 17 篇文章. 学习了这么多课,我想大家已经发现了,web scraper 主要是用来爬取文本信息的. 在爬取的过程中,我们经常会遇到一个问题:网页上的数据比较脏,我们只需要 ...

  2. Posix线程编程指南(4)

    Posix线程编程指南(4) 杨沙洲 原文地址:http://www.ibm.com/developerworks/cn/linux/thread/posix_threadapi/part4/ 线程终 ...

  3. 聊聊order by的工作机制

    总结写在前面: 1. 介绍了orderBy的两种算法流程:全字段排序 和 rowid排序. 2. rowid排序 相比 全字段排序,参与排序字段较少,耗内存较少,多一步回表,如果内存够的情况下MySQ ...

  4. 五分钟了解Semaphore

    一.前言 多个线程之间的同步,我们会用到Semaphore,翻译成中文就是信号量.使用Semaphore可以限制多个线程对同一资源的访问.我们先看下C#中对Semaphore的定义,如下图: 翻译成中 ...

  5. angular6 增加webpack配置 亲测可用

    核心 Angular Cli 6 禁用了webpack的自定义配置,官方似乎并未提供自定义配置webpack的方法. 在此之前,可以使用ng eject把默认的webpack提取到代码中,进行自定义. ...

  6. Java基础 - 数据类型和运算符

    Java 语言支持的类型分为两类:基本数据类型(Primitive Type)和引用类型(Reference Type). 目录 基本数据类型 数值类型 整数类型 byte short int lon ...

  7. 如何获取主键返回值(MySQL、Oracle)

    添加用户.返回主键 --场景:在执行新增用户sql后,service层返回新增用户的主键值(与mybatis一起使用) insert into user(username, sex, birthday ...

  8. leetcode之820. 单词的压缩编码 | python极简实现字典树

    题目 给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A. 例如,如果这个列表是 ["time", "me", "bell& ...

  9. JMeter入门介绍

    目录 概述 下载&安装 实战JMetetr 测试计划简述 准备测试计划 编写测试计划 录制测试脚本 执行性能测试 单机测试 分布式测试 分析测试报告 APDEX 响应时间和吞吐量统计 测试结果 ...

  10. iOS 构建静态库

    一..a 文件静态库打包 打开 Xcode 创建一个新的 Static Library 工程,取名 MyStaticLibrary. 创建工程完毕后,系统自动创建了一个同名类,添加一个方法用于测试. ...