既然看到Go语言的Map了,我们先解释一波JAVA中的Map不,毕竟也是干JAVA起步的。
各位没兴趣关心的可以跳过继续下一步
在JAVA里面Map接口中键和值一一映射. 可以通过键来获取值。
Map下面有三个实现,
|–Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
|–HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
|–TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
也就是说 HashMap如果说键值对是null他不会报错,但是Hashtable是回出现空指针异常的,这也是在面试中很容易问到的一些区别性的问题。
至于他们的底层,树结构和哈希表结构,我现在先不解释了,知道有这么回事,下次抽空专门整理一次,
那么我们再来说一下Go语言的Map(集合)。
Go语言中的Map 也是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。
定义 Map也是有2中形式
普通定义
/* 声明变量,默认 map 是 nil */
var map_variable map[key_data_type]value_data_type
使用内建函数make
map_variable := make(map[key_data_type]value_data_type)
但是Go语言贼尴尬的是,如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对,不能存放,他不是和JAVA中我们先定义一个new Map,然后存放东西。这个得谨慎一点!
看个实例搞一下
实例运行结果
delete函数
delete() 函数用于删除集合的元素, 参数为 map 和其对应的 key。实例如下:
实例结果执行一下
这样测试map集合就完了