【大白话说Java面试题】【Java基础篇】第20题:HashMap在计算index的时候,为什么要对数组长度做减1操作

第20题:HashMap在计算index的时候,为什么要对数组长度做减1操作

📚 回答:

  • 背景知识

    HashMap中,元素的存储位置(索引)通过位运算计算得出,公式为:

    java 复制代码
    index = (length - 1) & hash;

    其中,length是数组长度,hashkey的哈希值。

  • 为什么要减1?

    • 原因1:数组长度是2的幂

      • HashMap要求数组长度必须是2的指数次幂(如16、32、64)。
      • 如果数组长度是2的幂,那么length - 1的二进制表示就是全1(如15的二进制是1111)。
      • 这样,hash & (length - 1)的结果等价于hash % length,但效率更高(位运算比取模运算快)。
    • 原因2:确保结果落在数组范围内

      • 位运算的结果最大只能是length - 1,因此索引始终会落在数组的有效范围内,不会发生越界。
  • 底层原理

    • 示例:假设数组长度为16(即length = 16),则length - 1 = 15,其二进制为1111
    • 对于任意哈希值hashhash & 15的结果范围是0~15,正好对应数组的索引范围。

    💡 面试官视角

  • 面试官可能会问"为什么不直接用取模运算?"答:取模运算效率较低,而位运算更快且等价于取模运算(前提是数组长度是2的幂)。

  • 面试官可能会追问"如果数组长度不是2的幂会怎么样?"答:会导致索引计算不均匀,增加冲突概率,影响性能。


📌 专栏 :大白话说Java面试题 --- 01-Java基础篇

相关推荐
咖啡八杯1 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
优橙教育2 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
掘金码甲哥2 小时前
这块终端神器, 必须吹爆!
后端
糖果店的幽灵2 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
Csvn2 小时前
📊 SQL 入门 Day 8:集合操作 — 用 SQL 做数学里的"并交差"
后端·sql
腻害兔3 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
SeaTunnel3 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影4 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
奋发向前wcx4 小时前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
Marst Code4 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python