HashMap中的Bucket定义

问题描述 投票:0回答:1

我试图了解哈希图中的存储桶(索引)是如何通过键确定的,我已经阅读了 3 种确定它的方法,但不可能有 3 种。

1) index = hashCode(key) & (n-1)
2) index = hashcode % number of cells in the map
3) static int indexFor(int h, int length) {
   return h & (length-1);
}

我刚开始学习Java,看不懂2500行的hashmap代码。请告诉我索引(存储桶)是如何确定的,执行此操作的方法的名称是什么以及它在哪一行?我们需要的不是猜测,而是文档链接。

java algorithm data-structures hashmap
1个回答
0
投票

3个都是一样的。 1和3是相同的:

h
只是
hashCode(key)
n
length
也相同,这意味着它们是相同的。

第二个也是相同的:

n
始终是二的倍数,这意味着
n-1
,以位为单位,总是类似于 00011111111 - 全零,然后全一。

& x
,其中 x 是这样一个数字,简单地表示:当我们的
n
有 1 位时,不执行任何操作。如果有 0 位,则最终结果也应该有 0 位。在所有这些相当具体的条件下,
%n
& (n-1)
实际上是相同的数学运算。

例如,让我们

n = 8

那么

& (n-1)
与“将除底部 3 之外的所有位清零”相同。

%8
相同。例如,
10 % 8
显然是2。
10 & 7
是..也是2.

© www.soinside.com 2019 - 2024. All rights reserved.