当前位置: 首页 > news >正文

【Java】HashMap的key可以为null吗?如何存储的?

可以。HashMap中key为null时,哈希函数返回0,即hash(null)=0,因此null键会被存储在数组索引0的位置。

一、null作为key的存储逻辑:

1.计算哈希值:

在哈希函数中,明确对null做了特殊处理,直接返回哈希值0.
JDK1.8

static final int hash(Object key) {int h;// 若 key 为 null,直接返回 0return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

2.计算数组索引:

哈希值为0后,通过 hash & (容量 - 1)计算存储的数组索引.
即 0 & (容量 - 1) = 0)。
因此,null作为key时,必然存储在数组的索引0位置。(第一个桶)。

3.唯一约束:

HashMap中仅允许存在一个null键.
若多次插入null键,新的value会覆盖旧的value。

例子:

HashMap<String, Integer> map = new HashMap<>();
map.put(null, 1);   // 插入 null 键,值为 1
map.put(null, 2);   // 再次插入 null 键,值会覆盖为 2
map.put("a", 3);    // 插入普通键System.out.println(map.get(null)); // 输出 2(覆盖后的值)
System.out.println(map.size());    // 输出 2(仅 1 个 null 键 + 1 个 "a" 键)

二、总结:

  • HashMap 允许 key 为 null,且仅能存在一个 null 键(多次插入会覆盖值)。
  • null 键的哈希值固定为 0,因此始终存储在数组的索引 0 位置。
  • 这一设计与 Hashtable 形成对比(Hashtable 对 null 键会直接抛出 NullPointerException)。
http://www.lryc.cn/news/612489.html

相关文章:

  • JavaScript 基础语法
  • TDengine IDMP 背后的技术三问:目录、标准与情景
  • TCP的三次握手和四次挥手实现过程。以及为什么需要三次握手?四次挥手?
  • 8、项目管理
  • 力扣 hot100 Day67
  • 二、Envoy静态配置
  • CentOS8.5安装19c单机告警及处理
  • CS课程项目设计8:基于Canvas支持AI人机对战的五子棋游戏
  • LeetCode 面试经典 150_数组/字符串_O(1)时间插入、删除和获取随机元素(12_380_C++_中等)(哈希表)
  • Linux firewall 防火墙管理
  • Linux systemd 系统管理:systemctl 控制服务与守护进程
  • 深入理解 qRegisterMetaType<T>()
  • 【数据可视化-82】中国城市幸福指数可视化分析:Python + PyEcharts 打造炫酷城市幸福指数可视化大屏
  • JAVA算法练习题day9
  • 蓝桥杯----锁存器、LED、蜂鸣器、继电器、Motor
  • Pytest项目_day06(requests中Session的用法)
  • Python 进行点云ICP(lterative Closest Point)配准(精配准)
  • Java高频方法总结
  • 实习文档背诵
  • chdir系统调用及示例
  • docker启动出现Error response from daemon: Container的问题【已解决】
  • 92、【OS】【Nuttx】【构建】cmake 支持构建的目标
  • InfluxDB 集群部署与高可用方案(二)
  • 【概念学习】深度学习有何不同
  • 敏捷协作平台推荐:Jira、PingCode、Tapd等15款
  • iptables相关知识笔记
  • AI+物理融合新范式:物理信息神经网络(PINN)的深度研究报告
  • Flash Attention与SDPA
  • 深度探索:非静态内部类不能定义 static 成员属性和方法 及 静态内部类的必要性
  • AI Infra与LLM的联系与差异