Go语言规范的“地图类型”部分描述了地图类型的界面和常规用法,The Go Blog上的“ Go maps in action”一文中偶然提到了哈希表和“快速查找,添加和删除”。
的电流runtime/hashmap.go源代码描述了其作为散列表实施方案(其通常摊销O(1)); 但是,在语言规范或其他材料中我看不到任何性能特征(例如Big O性能)的保证。
runtime/hashmap.go
O(1)
go语言是否为地图类型或仅 接口 保证了任何 性能 保证(例如,恒定时间插入/查找/删除?)?(与 接口 和 实现 明显分开的Java语言相比。) __
语言参考并未明确保证地图的性能。映射的执行有一个隐含的期望,就像您期望哈希表执行一样。我看不到性能保证如何避免被模糊地指定或不准确。
Big- O复杂度是描述地图运行时间的一种糟糕方法:实际上,实际时钟时间是相关的,而复杂度则无关紧要。从理论上讲,具有有限域键(例如ints)的映射在空间和时间上都是O(1),而具有无限域键(例如字符串)的映射需要散列,并且相等性测试的详细信息包括在成本中,这使得插入和查找的平均情况最好为O(N log N)(因为键的平均大小必须至少为O(log N)才能构造具有N个条目的哈希表。除非您在规范将是不准确的,正确实现它的好处显然不值得。
要保证实际运行时间而不是复杂性,这也很困难:目标计算机种类繁多,还有缓存和垃圾回收的混杂问题。