Java HashMap实现哈希码问题

时间:2012-10-05 14:25:24

标签: java hashmap

在此处查看Java HashMap的实现:http://www.docjar.com/html/api/java/util/HashMap.java.html我注意到以下内容:

使用的内部数据结构是一个数组,在每个索引处存储对链表中第一个条目的引用。数组索引基于密钥的哈希码,链表表示该特定哈希码的桶。 我发现有趣的是方法indexFor(int h,int length),对于给定的密钥,它决定了数组中要查看的桶。但是实现,返回h& (length - 1)看起来很奇怪,对于与给定数组索引不一致的不确定数量的哈希码,该方法将返回0.因此,无论您为对象实现什么唯一哈希码,数组很可能充满了对象,因此您不会从独特的哈希码应该为您提供的内容中受益,即更快的数据访问。

我错过了什么吗?

的Cristian

2 个答案:

答案 0 :(得分:4)

您在HashMap源代码中缺少以下Javadoc:

/**
 * The table, resized as necessary. Length MUST Always be a power of two.
 */
transient Entry<K,V>[] table;

这意味着table.length-1将始终是1的序列。

答案 1 :(得分:0)

我不太明白你认为问题是什么。

h & (length - 1)是一种计算h % n的简单方法,其中n是2的幂。在我的理解中,没有任何理由可以h % n给出不自然的大量零。