当前位置: 首页 > 面试题库 >

Java中的HashMap实现。桶索引计算如何工作?

龚盛
2023-03-14
问题内容

我正在研究HashMapJava 的实现,只停留在一点。
indexFor函数如何计算?

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

谢谢


问题答案:

它不是在计算 哈希 ,而是在计算 存储桶

表达h & (length-1)确实逐位ANDh使用length-1,这是像一个位掩码,以便仅返回的低位比特h,从而使得对于一个超高速变体h % length



 类似资料:
  • 我正在看在Java中的实现,在某一点上卡住了。 如何计算函数? 谢谢

  • 我正在努力为下面给出的学生类编写合适的hashCode函数。 1)我认为hashCode应该足够好,这样两个不同对象的hashCode就不会相互冲突。 观察:对于这个实现,当我调试并检查“HashMap的内部表对象”类时,我发现HashMap中的每个条目都分配了不同的bucket位置。 问题:在每个索引处有一个桶(列表/树)的目的是什么。 实施: 2)如果我允许hashCode冲突: 观察:对于这

  • 问题内容: 我想确定索引的大小,它们是主键索引。这碰巧是在mysql集群上,但我认为这并不重要。 问题答案: 我认为这就是您要寻找的。 http://dev.mysql.com/doc/refman/5.1/zh-CN/show-table- status.html

  • 问题内容: 在一次采访中,我被要求计算内存使用量,如果其中有200万个项目,则估计将消耗多少内存。 例如: 映射是这样的。 我如何估计Java中此HashMap对象的内存使用情况? 问题答案: 简短的答案 为了找出对象的大小,我将使用探查器。例如,在YourKit中,您可以搜索对象,然后获取它以计算其深度大小。这将使您很清楚地知道如果对象是独立的,则使用多少内存,并且该对象的大小是保守的。 怪癖

  • 我使用PHP处理以下输入:sam 99912222 tom 1112222 harry 12299933 sam edward harry第1到第6行是姓名和电话号码。最后三行是搜索查询,如果姓名不在列表中(没有电话号码,打印未找到),否则输出数据。我的代码如下: 例外输出应为sam=99912222未找到harry=12299933输出为sam=99912222未找到未找到。为什么这些功能不起作

  • 我对Java中和的内部实现有点困惑。 这是我的理解,所以如果我错了,请纠正我: < code>HashSet或< code>HashMap都不允许重复的元素。 < code>HashSet由< code>HashMap支持,所以在< code>HashSet中,当我们调用< code >时。add(element),我们在元素上调用< code>hashCode()方法,并在内部对内部< code