java——为什么重写hashCode还需要重写equals

2023-11-02

hashCode与equals方法的作用其实一样,在java里面我们都是用它们来比较两个对象是否一致。那为和我们还需要使用hashCode?这里其实使用hashCode是为了提高效率,采取重写hashcode方法,先进行hashcode比较,如果不同,那么就没必要在进行equals的比较了,这样就大大减少了equals比较的次数,这对比需要比较的数量很大的效率提高是很明显的。

hashCode和equals的区别:

1.equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。

 2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。

为什么重写hashCode还需要重写equals呢?

其实在HashMap中比较两个key是否相等,需要同时使用这两个函数,因为自定义的类的hashCode()方法继承于Object类,其hashCode码是默认的内存地址,也就是说即便是两个相同含义的对象,也是不相等的。HashMap中的比较key是先比较它们的HashCode()是否相等,然后再比较它们的equals,如果都相等那就是相等的。若equals不相等,则认为他们是不相等的。如果只重写了hashcode方法没有重写equals方法,当比较equals的时候那么只是看它们是否是同一个对象而已(就是其内存地址的比较),所以需要两个方法进行重写。HashMap用来判断key是否相等的方法是调用了HashSet判断加入的元素是否相等,重载hashCode()则是为了对同一个key能够等到相同的HashCode,这样子HashMap就可以定位到我们指定的key上,重载equals是为了向HashMap表明当前对象和key上所保存的对象是相等的,这样才能够真正得到key所对应的键值对。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java——为什么重写hashCode还需要重写equals 的相关文章

随机推荐

  • 换肤实现及LayoutInflater原理

    文章目录 背景 实现换肤步骤 解析插件 apk 的包信息 获取插件 apk 的 Resources 对象 替换资源 简单的插件化换肤实现和存在的问题 换肤如何动态刷新 控件换肤刷新的性能考虑 如何降低 xml 布局中 View 的替换成本
  • Python 并发编程

    目录 一 为什么需要引入并发编程呢 二 怎么样选择多线程 多进程和多协程 1 CPU 密集型与 I O 密集型 2 多线程 多进程和多协程的对比 三 python 的全局解释器锁 GIL 1 python 速度慢的两大原因 2 GIL 是什
  • 多版本nodejs安装方式(在线、离线)

    在线版本node安装 1 首先得安装nvm windows 作用进行node版本的管理 Nvm windows 的github地址 https github com coreybutler nvm windows releases 2 nv
  • Random的nextInt方法

    Random类中的nextInt 方法 注 不带参数 会随机产生所有有效的整数 包括正数 负数和零 Random类中的nextInt int n 方法 会产生 0 n 之间的随机int值 包含0 不包含n 两种生成介于 0 100 的随机数
  • C语言学习笔记(6)——字符串的输入输出

    之前讲的putchar getchar 都是字符的输入输出 字符串的输入输出除了基本的scanf printf 也有puts gets fgets fputs 等 如果想要把一个字符串读取到程序当中 得先为它预留一个存储空间 再用输入函数获
  • 仿京东纯javascript轮播图

  • ease-out

    w3c
  • BES2300x笔记(3) -- 编写自动化编译脚本

    哈喽大家好 这是该系列博文的第三篇 篇 lt lt 系列博文索引 快速通道 gt gt 一 前言 接着上一篇 我们已经实现了通过指令来分别生成左右耳固件 但感觉上还不是很方便 第一 如果需要改回IO口区分 还是要去动代码 第二 每次想要生成
  • Python 生成器 generator之next和send运行流程

    http blog csdn net pfm685757 article details 49924099 对于普通的生成器 第一个next调用 相当于启动生成器 会从生成器函数的第一行代码开始执行 直到第一次执行完yield语句 第4行
  • Vue安装单文件组件

    安装 npm npm 全称为 Node Package Manager 是一个基于Node js的包管理器 也是整个Node js社区最流行 支持的第三方模块最多的包管理器 npm v 由于网络原因 安装 cnpm npm install
  • pivotMaxValues报错

    1 出现错误的操作 在列转行且用指定的列的值填充时报错 且列转行的字段个数超过10000个 2 具体错误 Exception in thread main org apache spark sql AnalysisException The
  • php layui文件批量上传,layui+php实现多文件上传的方法

    layui php实现多文件上传的方法 发布时间 2020 05 18 15 57 23 来源 亿速云 阅读 118 作者 小新 今天小编给大家分享的是layui php实现多文件上传的方法 相信很多人都不太了解 为了让大家更加了解 所以给
  • SEO百度搜索引擎优化网站排名

    目录 seo优化 介绍seo是什么 网站更新 网站排名在21世纪的意义 网站为电商引流 百度算法规则 排名流程 seo策略 规则 学会在线球里玩 单页面收录显示 必要条件 链接数量 日志统计 及时优化seo策略 降低识别难度 收录越多排名就
  • Matlab:*.txt转换为*.mat

    在许多应用中 将其他仿真软件输出的数据导入Matlab中应用 Matlab导入的数据文件格式为 mat 而其他仿真输出数据格式为 txt 因此要在使用之前将 txt格式转换为 mat格式 语句如下 Load txt 为文件存储路径及文件名
  • 环保产业发展前景:“智能化”为绿色环保注入新动能

    摘要 随着我国环境治理要求的日益严格 环保设备市场需求巨大 产业持续快速增长 在智慧产业快速发展的同时 具备浓厚 云 色彩的环保设备在环境治理应用体系中将更有优势 智能化 数据化应用将会智慧环保 未来环保设备行业市场发展前景巨大 图绿色 智
  • 鼓励师加成太刺激了,鼻血喷了半斤,代码不一会儿就写完了...

    本文原创公众号 不会笑青年 授权转载请联系微信 laughyouth369 授权后 请在原创发表48小时后转载 我知道你在看
  • STM32F103ZET6【标准库】----- 04串口5的IO口收发数据实验测试

    链接 串口1的两组IO口收发数据实验 链接 串口2的两组IO口收发数据实验 链接 串口3的三组IO口收发数据实验 链接 串口4的一组IO口收发数据实验 一 硬件介绍 本次实验用到的单片机是STM32F103ZET6 正点原子战舰开发板 用到
  • Linux 网桥支持LLDP 透传的解决方法

    inux 虚拟网桥默认会悄悄地删除LLDP消息 发送到LLDP Multicast地址01 80 C2 00 00 0E 和01 80 C2 00 00 xx范围内的其他控制帧 原因可以在802 1AB标准中找到 该标准规定 the des
  • Window 通过cmd查看端口占用、相应进程、杀死进程

    一 查看所有进程占用的端口 在开始 运行 cmd 输入 netstat ano 可以查看所有进程 二 查看占用指定端口的程序 当你在用IIS发布程序时 经常会遇到端口80被占用的情况 我们想知道是哪个程序或进程占用了端口 可以用该命令 ne
  • java——为什么重写hashCode还需要重写equals

    hashCode与equals方法的作用其实一样 在java里面我们都是用它们来比较两个对象是否一致 那为和我们还需要使用hashCode 这里其实使用hashCode是为了提高效率 采取重写hashcode方法 先进行hashcode比较