java hashmap替换key,HashMap 用可变对象作为 key 踩坑
点击上方☝
Java编程技术乐园,轻松关注!
及时获取有趣有料的技术文章
做一个积极的人编码、改bug、提升自己
我有一个乐园,面向编程,春暖花开!
作者:Icharle
https://icharle.com/hashmapkebianobj.html
前言
在 Java 道路上越踩越多坑,最近被问到一个知识点,当对象作为 HashMap 一个 key 时,在未重写equals和hashcode方法时候,get方法返回的值为null。
分析
在下面一段代码中,未重写 equals 以及 hashCode 方法情况下,输出结果为null。
改造后代码:
原因分析
HashMap 在查找某一个 key 时,先是用 hashCode 函数根据该 key 的地址计算,再用 equals 函数根据对象的地址进行比较。
在代码片段一中 : map.put(new People("icharle"), 18); 以及System.out.println(map.get(new People("icharle")));中默认是两个对象 (也就是说两个对象的地址不一样,自然 hashcode 函数得到的值是不一样 (因为两个的对象的地址不同,自然在 equals 时候更不可能相等,最终得到的结果为 null。
在代码片段二中:重载hashCode()函数的作用是:对于同一个 key,得到相同的 hash 值,重载equals()函数的作用是:向HashMap表明当前对象和 key 上所保存的对象是相等的。因此该情况下最终结果为 18
往期精彩回顾
欢迎长按下图关注公众号
后台回复【资源】,获取珍藏干货!
99.9%的伙伴都很喜欢
朕已阅
java hashmap替换key,HashMap 用可变对象作为 key 踩坑相关推荐
- java顺丰运费接口_对接顺丰丰桥踩坑汇总(写给自己)
顺丰丰桥使用流程 登录注册丰桥 https://qiao.sf-express.com/index.html 申请一条龙 开发者信息 按提示搞就行了,然后会有个测试月卡,如果正式环境需要申请正式月卡 ...
- Java实现图片(jpg/png)转成TIF格式(300dpi)踩坑笔记
一.TIF/TIFF介绍 引用百度百科的一句话总结: 标签图像文件格式(Tag Image File Format,简写为TIFF)是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像. 二. ...
- Java多线程--设计模式(二、Immutable Object(不可变对象)模式)
一.Immutable Object 模式简介 多线程共享变量的情况下,为了保证数据的一致性,往往需要对这些变量的访问进行加锁.而锁本身又会带来一些问题和开销.Immutable Object 模式使 ...
- Hashmap 面试题 + Hashmap 原理 + Hashmap 源码(史上最全)
HashMap作为我们日常使用最频繁的容器之一,相信你一定不陌生了.今天我们就从HashMap的底层实现讲起,深度了解下它的设计与优化. 常用的数据结构 我在05讲分享List集合类的时候,讲过Arr ...
- 关于HashCode方法,可变对象和内存泄漏问题
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 这是一篇关于hashCode方法,可变对象和内存泄漏问题的文章. 1. 重写 hashCod ...
- 为什么 HashMap 常用 String 对象作 key
偶然的一次机会看到了这个题目,有一个网上的朋友说在面试的时候面到了这道题目,没有能给出解释.这里就谈一谈自己的理解. 在<Java 编程思想>中有这么一句话:设计 hashCode() 时 ...
- java hashmap 重复_java HashMap插入重复Key值问题
今天在用到了HashMap来添加数据,发现有重复的key添加.查看java文档终于知道了解决方法.请看下面原来的例子: class User { private String id; private ...
- Java集合框架:HashMap
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- 【Java千问】HashMap之追命5连问
1.HashMap底层实现数据结构? 总的来说,HashMap就是数组+链表的组合实现,每个数组元素存储一个链表的头结点,本质上来说是哈希表"拉链法"的实现. HashMap的链表 ...
最新文章
- SAP MM Inbound Delivery凭证流里不出现采购订单号?
- MySQL主从复制延迟的监测及缓解
- hdu1521(指数母函数)
- 启明云端分享|ESP32-S3 的 USB 支持 USB Host 吗?
- ajax加载对应的json,jQuery:多个AJAX/JSON请求对应单个回调并行加载
- python解题软件哪个好用_几个好用的Python数据分析工具
- 角度控制_手机拍剪影,选择拍摄角度,还要控制画面亮度
- camera---(3)双camera 生态链
- SQLServer left join 出现比左表多的数据
- 【概率论与数理统计】小结7 - 统计学中的基本概念
- MarkDown 语法初步
- 网络安全学习第16篇 - CE游戏动态内存修改器
- 用计算机弹奏体面6,抖音用计算器弹奏音乐曲谱大全 极乐净土、体面和成都等歌曲...
- Linux 路由表和静态路由
- UOJ Easy Round #8 T1 打雪仗 题解
- 洛谷 P3387 缩点 题解
- Lua程序设计 | 模块和包、泛型迭代器和for、元表和元方法
- IBL-镜面反射(预滤波篇)
- KVM切换器和VGA切换器的区别
- 大数据能否解决城市所面临的环境问题
热门文章
- 非负矩阵之Perron-Frobenius定理
- android n 发布时间,Android N 正式版将在9月发布
- java扫描指定package注解_java获取包下被指定注解的类
- 绘制Nine-Patch图片
- NOIP模拟测试25「字符串·乌鸦喝水·所陀门王的宝藏(陀螺王)」
- Mybatis 在 insert 之后想获取自增的主键 id,但却总是返回1
- [转]Global exception handling in Web API 2.1 and NLog
- 05 HTML字符串转换成jQuery对象、绑定数据到元素上
- (Oracle)DDL及其数据泵导入导出(impdp/expdp)
- 解决checkbox与对应文字不对齐的问题