【问题标题】:indexFor in hashmap? [duplicate]哈希图中的indexFor? [复制]
【发布时间】:2013-03-16 20:38:57
【问题描述】:

只是想通过查看代码来了解Java HashMap 的工作原理。添加元素时,会发生以下情况:

  1. 得到key的hashcode
  2. 对结果应用哈希函数
  3. 方法 indexFor 应用于 2 的结果。这给出了相应存储桶中的第一个条目。然后对桶中的链表进行迭代 - 找到末尾并添加元素。

implementation of indexOf 是:

int indexOf(int h, int length) {
     return h & (length-1);
}

我无法理解 indexOf 方法中的技巧。谁能解释一下?

谢谢。

【问题讨论】:

    标签: java hashmap


    【解决方案1】:

    这是可行的,因为 Java HashMaps 总是有一个容量,即存储桶的数量,是 2 的幂。让我们使用 256 的容量,即 0x100,但它可以使用 2 的任何幂。减去 1从 2 的幂产生按位所需的确切位掩码,并使用哈希来获得正确的存储桶索引,范围为 0length - 1

    256 - 1 = 255
    0x100 - 0x1 = 0xFF
    

    例如将 257 (0x101) 的哈希值与 0xFF 进行按位与运算,得到存储桶编号 1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-01
      • 2012-07-17
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多