【发布时间】:2022-02-27 18:36:04
【问题描述】:
假设你有一个这样的接口(Java 示例):
interface ImmutableMap<K,V> {
V get(K key);
}
实现它的一种方法是使用哈希表 (HashMap),假设哈希函数良好,它的平均性能为 O(1),最坏的情况为 O(n)。
但是哈希表是可变的 - 它还允许在映射中删除和放置元素 - 这可能意味着为了使 put 和 delete 更快,get 的性能正在做出妥协。
所以问题是 - 仅实现 get 可以做出哪些改进 - 可能是 O(1) 最坏情况,或者只是更好的一般性能(例如 2 倍),如果不是渐近更快?
【问题讨论】:
-
如果你得到了完美的实现但为了不变性,使用
Collections.unmodifiableMap(java.util.Map)。 -
(使用散列的当代实现可能使用平衡树来处理超过某个阈值的箱。)
-
我正在寻找一个实用的解决方案(完美的散列不实用 - stackoverflow.com/a/29778785/7773885)以及不依赖于语言的东西。
标签: algorithm data-structures hashmap hashtable computer-science