【发布时间】:2016-12-31 22:06:20
【问题描述】:
所以我知道哈希映射使用存储桶和哈希码,什么不是。根据我的经验,Java 哈希码并不小,但通常是很大的数字,所以我假设它没有在内部编制索引。除非哈希码质量很差,导致桶长度和桶数量大致相等,否则是什么让哈希图比名称->值对列表更快?
【问题讨论】:
-
Hashmaps使用key的hashcode直接访问存储entry的bucket。这是一个 O(1) 访问。如果由于相同或相似的哈希码而导致该存储桶中有多个元素,那么您需要进行更多检查,但它仍然比遍历列表和搜索元素要快得多。
-
因为不是哈希码本身被用作数组索引。 hashmap 内部的数组要小得多(取决于你如何初始化它以及它有多少元素),hashmap 会进行另一次计算以从 hashcode 中计算出真正的数组索引。
-
如今 int 已经不是很大的数了...
-
很抱歉,但这个问题显示出明显缺乏研究。将有数百个网站解释哈希表的基本原理。更不用说每本值得购买/借阅的关于数据结构和算法的介绍性教科书了。