Golang Go语言中为什么只有 hashmap?
Golang Go语言中为什么只有 hashmap?
为什么 go 中只有 hashmap ?而不像 java 一样提供 treemap 和 linkedhashmap 呢?
上网查了一下,貌似是 go 的开发团队有意为之??
第三方库里面是有的
我也很困惑,之前不得已自己实现了一个 SkipList 来存储有序的数据
treemap 有的 看下 gods 这个库
因为标准库不提供?
go 的 map 就只是 map,是一个抽象数据类型( ADT )
hashmap 是具体实现,也就是,可以有其他实现,只要保证符合这个 ADT 的语义就行
go 的 map 是语言的一部分,是一种内置类型,而 java 的 TreeMap 和 LinkedHashMap 都是库实现,而不是语言的一部分
go 语言有 map 这个内置类型,而 java 没有,应该这样理解,而不是 go 只有 hashmap
要其他的 map,实现成库就行,像 java 那样。不过 go 还没有泛型,有泛型会更好写好用一些
出来的晚,轮子没造全
为什么 Python 也没有,为什么有序字典的地位这么低
我指的是 treemap 那种大小关系的全序,不是插入顺序
在Go语言中,确实没有像其他编程语言那样直接提供多种集合类型(如hashset、hashtable、tree等),而是主要依赖map
(在Go中通常被称为hashmap)来实现键值对的存储和快速查找。这一设计选择背后有几个原因:
-
简洁性与实用性:Go语言追求简洁的语法和实用的功能。
map
类型已经能满足大部分集合操作的需求,包括快速的插入、删除和查找操作,这对于大多数应用场景来说已经足够。 -
性能优化:
map
在Go语言中经过高度优化,提供了接近O(1)的时间复杂度,这对于高性能需求的应用非常重要。通过专注于优化这一种数据结构,Go语言能够确保它在各种场景下的稳定性和效率。 -
避免复杂性:提供过多的集合类型可能会增加语言的复杂性,使得学习和使用变得困难。Go语言通过限制集合类型的数量,降低了学习曲线,使得开发者能够更快地掌握和使用这门语言。
-
灵活性:虽然Go语言没有直接提供其他集合类型,但开发者可以通过组合使用
map
、切片(slice)等内置类型来实现更复杂的数据结构。这种灵活性允许开发者根据具体需求定制解决方案。
综上所述,Go语言选择只提供map
作为主要的集合类型,是基于对简洁性、性能、复杂性和灵活性的综合考虑。这种设计使得Go语言在保持强大功能的同时,保持了简洁和易用的特点。