Go语言中的map是一种非常有用的数据结构,可以用于存储键值对。下面是一道涉及map的面试题及其详解。
问题描述:
有如下Go代码:
func main() {
m := make(map[int]string)
m[1] = "a"
m[2] = "b"
fmt.Println(m[1], m[2])
delete(m, 2)
fmt.Println(m[2])
}
请问上面的代码中,输出的结果是什么?
答案解析:
在上面的代码中,我们使用make函数创建了一个map,然后向其中添加了两个键值对,分别是1:"a"和2:"b"。接着,我们输出了这两个键对应的值,分别是"a"和"b"。
接下来,我们使用delete函数从map中删除了键为2的元素。然后,我们尝试输出键为2的值,但是输出为空。这是因为我们已经从map中删除了键为2的元素,所以它对应的值已经不存在了。
需要注意的是,当我们从map中访问一个不存在的键时,它会返回该值类型的零值。在本例中,值的类型是string,它的零值是""。所以,当我们尝试输出键为2的值时,它返回的是空字符串。
需要提醒的是,map是一种引用类型的数据结构,它的底层实现是一个哈希表。在使用map时,需要注意以下几点:
- map是无序的,即元素的顺序不固定。
- map的键必须是可以进行相等性比较的类型,如int、string、指针等。(通俗来说就是可以用==和!=来比较的,除了slice、map、function这几个类型都可以)
- map的值可以是任意类型,包括函数、结构体等。
- 在多个goroutine之间使用map时需要进行加锁,避免并发访问导致的竞态问题。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!