Golang Map类型

Map介绍

Map介绍

  • 在Go中,map是哈希表的引用,是一种key-value数据结构。map类型写作map[K]V,其中K和V分别对应key和value的类型。
  • map中所有的key都是相同的类型,所有的value也是相同的类型,但key和value可以是不同的类型,value通常使用自定义类型。
  • map内部需要通过判断两个key是否相等以确保每个键的唯一性,因此key的数据类型必须是可比较,如果key是自定义类型,则要求自定义类型中的所有字段是可比较的。

map的示意图如下:

在这里插入图片描述

map中仅包含一个指向底层哈希表的指针,属于引用类型,当map类型变量进行赋值或传参时,本质就是将map中指向哈希表的指针的值进行拷贝,因此最终两个map变量底层指向的是同一个哈希表,其中一个变量对哈希表修改会影响到另一个map变量。如下:

在这里插入图片描述

Map的定义方式

方式一:make map

在定义map时,可以通过make创建指定初始容量的map。如下:

package main

import (
	"fmt"
	"unsafe"
)

func main() {
   
	// 方式一:make map
	var m = make(map[string]string, 10)
	fmt.Printf("m = %v\n", m)                     // m = map[]
	fmt.Printf("m len = %v\n", len(m))            // m len = 0
	fmt.Printf("m size = %d\n", unsafe.Sizeof(m)) // m size = 8
}

说明一下:

  • map定义后需要先通过make函数分配内存空间,然后才能使用。make是Go中的内建函数,可以用于分配并初始化一个map,其第一个参数表示map的类型,第二个参数表示初始容量,第二个参数若省略则使用默认的初始容量。
  • 在调用make函数创建map时提供初始容量,以便底层哈希表开辟足够多的哈希桶,这样可以避免后续在插入键值对时哈希表的频繁扩容(重新哈希),从而提高性能。
  • 通过len函数可以获取map中键值对的数量,但无法通过cap函数获取map的容量,map底层的哈希表会自动扩容以适应需要存储的键值对数量。

方式二:指定具体的键值对

在定义map时,也可以直接指定具体的键值对。如下:

package main

import (
	"fmt"
)

func main() {
   
	// 方式二:指定具体的键值对
	var m = map[string]string{
   
		"四川省": "川",
		"陕西省": "陕",
		"广东省": "粤",
	}
	fmt.Printf("m = %v\n", m)          // m = map[四川省:川 广东省:粤 陕西省:陕]
	fmt.
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2021dragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值