java hashmap替换key,HashMap 用可变对象作为 key 踩坑

点击上方☝

Java编程技术乐园,轻松关注!

及时获取有趣有料的技术文章

做一个积极的人编码、改bug、提升自己

我有一个乐园,面向编程,春暖花开!

9abe61f96fb8d4dfa0b642e368b79860.png

作者:Icharle

https://icharle.com/hashmapkebianobj.html

前言

在 Java 道路上越踩越多坑,最近被问到一个知识点,当对象作为 HashMap 一个 key 时,在未重写equals和hashcode方法时候,get方法返回的值为null。

分析

在下面一段代码中,未重写 equals 以及 hashCode 方法情况下,输出结果为null。

bd5f7cb25fcd250b1d3c0d77eb48ccbb.png

改造后代码:

ac7467a6de2708cad0ab2aacecf045dc.png

原因分析

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

8ad2422a8df249b00df35737f5a2dcf0.gif

往期精彩回顾

644f7004bf23e7e5434df65ebcbb1fcb.png

f6c5d3b6061331b5fa53c2153e6b924a.png欢迎长按下图关注公众号

f6c5d3b6061331b5fa53c2153e6b924a.png

后台回复【资源】,获取珍藏干货!

99.9%的伙伴都很喜欢

ca340fd84a10cce52f878f6f9298e387.png

3af57a6008b91aa7b425bff3d6f01ee6.png

朕已阅

f14e1f639c93401402c839924995a5f3.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(转)Eclipse平台技术概述

转载:周金根 http://zhoujg.blog.51cto.com/1281471/516833Eclipse:Eclipse平台技术概述2010-10-19 13:35:00标签:Eclipse 休闲 职场原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明…

带有光纤的可扩展,健壮和标准的Java Web服务

这篇博客文章讨论了负载下的基准Web服务性能。 要了解有关Web服务性能理论的更多信息,请阅读利特尔定律,可伸缩性和容错 。 使用阻塞和异步IO对Web服务进行基准测试 Web应用程序(或Web服务)如何在负载下,面对各种故障…

php js 图片旋转,jQuery实现可以控制图片旋转角度效果

本文实例讲述了jQuery实现可以控制图片旋转角度效果。分享给大家供大家参考,具体如下:运行效果截图如下:具体代码如下:/p>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">img { margin-top:100px; m…

【OAuth】快速入门

一、引言 1、什么是OAuth2.0? OAuth 2.0是一个关于授权的开放网络协议,允许用户授权第三方应用访问其在服务提供商上存储的资源(如照片、视频、联系人列表),而无需将用户名和密码提供给第三方应用。OAuth 2.0在第三方应…

jert oracle 统计说明,Oracle JET简单入门(一)Oracle JET介绍

Oracle JET (Oracle Javascript Extension Toolkit)是一款 Oracle 的 JavaScript 拓展工具包。简单来说 Oracle JET 是一个一堆好用的前端工具结合体。Oracle JET 文档链接 http://docs.oracle.com/middleware/jet310/jet/developer/toc.htmOracle JET支持 Model-View-ViewMod…

SELECT语句使用JDBC和Hibernate批量获取

介绍 现在,我已经介绍了Hibernate对INSERT , UPDATE和DELETE语句的批处理支持,是时候分析SELECT语句结果集的批量提取了。 JDBC ResultSet提供了一个客户端代理游标,用于获取当前语句的返回数据。 执行该语句后,必须将…

Spring环境的搭建与测试 (spring2.5.6)

这里是采用的视频里面的spring版本 下载spring2.5.6, 然后进行解压缩,在解压目录中找到下面jar文件,拷贝到类路径下 dist\spring.jar lib\jakarta-commons\commons-logging.jar 上边两个是基本的jar包。。 如果使用了切面编程(AOP),还需要下列…

如何使用Hibernate批处理INSERT和UPDATE语句

介绍 JDBC长期以来一直为DML语句批处理提供支持。 默认情况下,所有语句都一个接一个地发送,每个语句都在单独的网络往返中发送。 批处理使我们能够一次性发送多个语句,从而节省了不必要的套接字流刷新。 Hibernate将数据库语句隐藏在事务后写…

linux 查看系统组账号密码是什么,Linux 用户与组管理详解(system-config-users 命令行)...

用户与组管理用户相关文件组账号相关文件用户和组管理软件:基于命令行的用户和组管理创建用户查看用户信息删除用户修改用户信息为用户创建密码更改用户密码信息创建组删除组查看当前登录到系统的用户用户与组管理什么是用户,用户是人吗?用户…

linux没有root密码xshell,LINUX终端免密登陆(以Xshell为例)

1,工具-新建用户密钥生成向导linux2,密钥类型选择:RSA,而后下一步shell3,输入密钥名称和密码ssh4,公钥格式为SSH-OpenSSH,保存为文件(后缀为pub)(记录此文件目录)工具二,登陆在须要免密登陆的主…

ActionBar之style出现Cannot resolve symbol 'Theme' 错误

今天 2014/03/08 00:49 刚刚升级 android studio 到了 0.5.0 版本,修复了许多 bug,包含当前这个问题,之前一直困扰我很久,莫名奇妙的提示主题样式找不到,无法解析, 后来一直谷歌发现很多人都认为是 IDE 的b…

单片机上运行linux程序代码,在Linux下烧录51单片机

原标题:在Linux下烧录51单片机*本文作者:LEdge1,本文属 FreeBuf原创奖励计划,未经许可禁止转载。背景我一直在学习Linux 系统,但是最近还要学习51单片机,所以在Linux下给51单片机烧录程序那是非常必要的。之…

linux运行core控制台程序,VisualStudioCode创建的asp.net core控制台程序部署到linux

1、asp.net core控制台程序static void Main(string[] args){int times10;while(times>0){Console.WriteLine("Hello World!");times--;Thread.Sleep(1000);}}2、发布发布前,修改test2.csproj文件(项目名称为test2)Exenetcoreapp2.1centos.7-x64主要添…

wps linux版本支持vba,Wps vba安装包

wps vba是款专用于wps办公软件的宏插件,可以利用VBA制作Excel登录系统,实现一些VB无法实现的功能,操作界面人性化,方便用户的操作,还可以利用VBA来Excel内轻松开发出功能强大的自动化程序。软件简介:wps vb…

我的Dojo中有一个Mojo(如何编写Maven插件)

我一直忙于在工作中使用Maven的腋窝。 对于很多开发人员,我会听到:“那又怎样。” 不同之处在于,我通常在无法直接访问Internet的环境中工作。 因此,当我说我经常使用Maven时,这意味着某些事情。 依赖地狱 公平地说&a…

在linux下安装mongo数据库,Linux系统下安装MongoDB

MongoDB提供了Linux系统上32位和64位的安装包,你可以在官网下载安装包。下载完安装包,并解压 tgz(以下演示的是 64 位 Linux上的安装) 。curl-O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz # 下载tar-zxvf mongodb-linux-x86_64-…

Windows 8.1 新增控件之 Hyperlink

Windows 8.1 新增控件之 Hyperlink 原文:Windows 8.1 新增控件之 HyperlinkHyperlink 控件应该不用过多介绍大家肯定十分清楚其作用&#xff0c;它的功能就像HTML中的<a href””>标签一样&#xff0c;只不过是在XAML中实现。 使用Hyperlink 标记的文字在应用中会以特殊颜…

Linux的slab和nginx的区别,Nginx核心知识100讲》nginx Slab管理器

极客专栏《Nginx核心知识100讲》38小节的笔记nginx 不同的worker之间需要共享信息的时候&#xff0c;只能通过共享内存。共享内存会使用链表&#xff0c;红黑树这样的数据结构。但是每个红黑树上有很多节点&#xff0c;每个节点上都需要分配内存去存放。怎样把一整块共享内存切…

睡觉时:新增的Java 8新增功能

自Java 8推出以来&#xff0c;最有趣的功能是什么&#xff1f; Java 8最近庆祝了它的第一个生日&#xff0c;而主要版本刚刚一年多前发布。 这当然值得庆祝。 自从最初的Java 8版本问世以来&#xff0c;已经发布了六个更新。 这些更新中的一些元素是次要的&#xff0c;但是如…

树莓派安装win10arm linux,在树莓派3B 上安装 Windows 10 ARM 版的方法

早先关注我们的朋友可能对《国外开发者尝试在树莓派3上运行Windows 10桌面版》有印象。本文转自 amatfan.com&#xff0c;文末视频来自 daveb778(感谢柠栀和刺分享)&#xff0c;给出了如何在树莓派3B上安装Windows10 ARM版&#xff0c;是的&#xff0c;这次并非IoT版&#xff0…