【发布时间】:2012-02-13 11:04:57
【问题描述】:
我知道哈希表可能存在性能问题,但是具有 100 万个项目的哈希表如何能比具有 100 个项目的哈希表更快?
【问题讨论】:
-
您是在谈论
Hashtable、HashMap、ConcurrentHashMap还是一般的哈希表?当你自己试验它们时,你发现了什么?
我知道哈希表可能存在性能问题,但是具有 100 万个项目的哈希表如何能比具有 100 个项目的哈希表更快?
【问题讨论】:
Hashtable、HashMap、ConcurrentHashMap 还是一般的哈希表?当你自己试验它们时,你发现了什么?
这取决于所使用的哈希算法的效率。
如果小地图有很多碰撞,而大地图没有碰撞,那么大地图会更快。
阅读HashMap javadocs 以了解初始容量和负载因子,并阅读哈希码(以Object.hashCode() 开头)。 (Hashtable是古代遗物,don't use it。)
【讨论】:
这完全取决于冲突的数量:如果哈希表中有 100 万个项目完全没有冲突,那将比有 100 个项目和 100 个冲突的哈希表快得多。
如果没有冲突,查找将是 O(1),仅使用散列键和模(参见完美散列)。在发生冲突的情况下(假设哈希表是数组,并且冲突链接在链表中),您必须依次遍历所有这些项,直到找到有问题的项目,最坏的情况是 100% 的冲突率(想想恒定哈希函数,即)将是 O(n)。
【讨论】: