当前位置: 首页 > 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.dtcms.com/a/317254.html

相关文章:

  • 线性代数中矩阵的基本运算运算
  • 【图像处理基石】浅谈3D城市生成中的数据融合技术
  • 分布式微服务--GateWay(1)
  • 【注意】HCIE-Datacom华为数通考试,第四季度将变题!
  • 基于Hadoop的木鸟民宿数据分析与可视化、民宿价格预测模型系统的设计与实现
  • OpenKruise
  • Linux《进程间通信(上)》
  • Git 乱码文件处理全流程指南
  • 记一次ORACLE ORA-00600 [19004] 错误的分析与解决方法
  • HarmonyOS 5 入门系列-鸿蒙HarmonyOS示例项目讲解
  • 铁路通信信号基础知识点(2)轨旁与车载ATP关系
  • 《动手学深度学习》读书笔记—9.5机器翻译与数据集
  • 虚拟机磁盘扩容
  • centos KVM
  • Java技术栈/面试题合集(19)-架构设计篇
  • Vue2中实现数据复制到 Excel
  • 【普通地质学】地球的物质组成
  • 什么是OAuth2.0协议?有哪几种认证方式?什么是JWT令牌?和普通令牌有什么区别?
  • 【JS-7-ajax】AJAX技术:现代Web开发的异步通信核心
  • 数据赋能(381)——数据挖掘——支持异类数据库
  • Springboot 默认注入方式和@Primary
  • 高职5G移动网络运维实验(训)室解决方案
  • Wireshark协助捕获信号波形
  • 【STL源码剖析】从源码看 vector:底层扩容逻辑与内存复用机制
  • 常见类型在内存中的存储
  • 百度华为硬件笔试机试题-卷4
  • 5G毫米波射频前端测试:OTA暗室与波束成形性能验证
  • WinForm之ListView 组件
  • bat脚本实现获取非微软官方服务列表
  • Minio 高性能分布式对象存储