Java重写hashcode方法
1.先初始化一个整形变量,为此变量赋予一个非零的常数值,比如int result = 17;
2.选取equals方法中用于比较的所有域,然后针对每个域的属性进行计算:
(1) 如果是boolean值,则计算f ? 1:0
(2) 如果是byte\char\short\int,则计算(int)f
(3) 如果是long值,则计算(int)(f ^ (f >>> 32))
(4) 如果是float值,则计算Float.floatToIntBits(f)
(5) 如果是double值,则计算Double.doubleToLongBits(f),然后返回的结果是long,再用规则(3)去处理long,得到int
(6)如果是对象应用,如果equals方法中采取递归调用的比较方式,那么hashCode中同样采取递归调用hashCode的方式。否则需要为这个域计算一个范式,比如当这个域的值为null的时候,那么hashCode值为0
(7)如果是数组,那么需要为每个元素当做单独的域来处理。如果你使用的是1.5及以上版本的JDK,那么没必要自己去重新遍历一遍数组,java.util.Arrays.hashCode方法包含了8种基本类型数组和引用数组的hashCode计算,算法同上,
还有就是:
1.hashcode相等,两个对象不一定相等,需要通过equals方法进一步判断;
2.hashcode不相等,两个对象一定不相等;
3.equals方法为true,则hashcode肯定一样;
4.equals方法为false,则hashcode不一定不一样。
Java重写hashcode方法相关推荐
- java重写hashcode方法代码_Java重写hashcode方法
覆写hashcode 1. 把某个非零常数值,例如17,保存在int变量result中: 2. 对于对象中每一个关键域f(指equals方法中考虑的每一个 覆写hashcode 1. 把某个非零常数值 ...
- JAVA中重写equals()方法的同时要重写hashcode()方法
object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true:注意:当此方法 ...
- java equals重写原则_java中为何重写equals时必须重写hashCode方法详解
前言 大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至于为什么重写这两个方法很多人都搞不明白. 在上一篇博文Ja ...
- java重写面试题_Java面试题:重写了equals方法,为什么还要重写hashCode方法?
核心问题:重写了equals方法,为什么还要重写hashCode方法? 这不仅仅是一道面试题,而且是关系到我们的代码是否健壮和正确的问题.在前面两篇文章涉及到了equals方法的底层讲解:<说说 ...
- Java重写equals方法时为什么要重写hashCode方法
在我们平时编写Java代码时,重写equals方法时一定要重写hashCode方法,这是为什么呢? 在讨论这个问题前,我们先看下Object类中hashCode方法和equals方法. hashCod ...
- Java的重写equals但不重写hashCode方法的影响
首先,说下equals和hashCode的关系.JDK API中关于Object类的equals和hashCode方法中说过,总结起来就是两句话:equals相等的两个对象的hashCode也一定相等 ...
- Java——重写hashCode()和euqals()方法
1.顺序表的问题 查找和去重效率较低 对于这样的顺序表来说,如果需要查找元素,就需要从第一个元素逐个检查,进行查找.对于需要去重的存储来说,每次存入一个元素之前,就得将列表中的每个元素都比对一遍,效率 ...
- 为什么要重写hashcode()方法-(十万个为什么/Java)
前言 十万个为什么之为什么要重写hashcode()方法??? equals比较的是对象的内容,==比较的是对象的地址. equals()和hashcode()都是属于超类(Object)类中的基本方 ...
- Java重写hashcode()与equals()方法
一. hashCode 1. 基本概念 hashCode 是 JDK 根据对象的地址算出来的一个 int 数字(对象的哈希码值),代表了该对象再内存中的存储位置. hashCode() 方法是超级类 ...
最新文章
- HR只在这些时间里看你的简历!
- malloc 源码_UE4源码剖析:MallocBinned(上)
- dojo mobile问题汇总
- 【JAVA】家庭记账系统
- matlab标定工具安装,标定工具(matlab仿真工具)
- efm32芯片电压_【经验】基于EFM32G232芯片 ADC采样毛刺问题分析以及解决方案
- PhpMyWind储存型XSS漏洞练习(CVE-2017-12984)
- 优化源于99%的试验和1%的数据决策力
- (原创)直观了解通道混和器的校色作用
- 联想开机启动项按哪个_联想笔记本按哪个按键进入U盘启动|详解联想进入U盘启动的教程...
- 塑料壳上下扣合的卡扣设计_读书笔记-塑胶外壳卡扣设计
- 【用户画像】应用场景
- esp32学习笔记(4)——adc
- PHP从网站抓取图片并保存本地的代码
- python培训学校-上海python培训学校
- BSA分析拟南芥F2代分离群体混池测序
- appfuse3 生成代码
- 士兵队列训练问题(队列--先进先出)
- 求给定范围内的所有质数
- plsql批量导出、导入
热门文章
- 第一章 Java程序设计-开发入门1
- 易语言 代码编辑框 关键字高亮_易语言和SEO--易语言自然语言处理应用(一)...
- 外汇交易中的风险管理
- blackberry起步-图片滚动
- .net core .net6 Form Cookie Login 认证
- 如何将python代码生成exe小程序
- 2023上海国际电商物流包装产业展览会相约上海
- 06 数据结构与算法之哈希表(拉链法) (C语言实现)
- matlab canny算子原理,Canny算子边缘检测原理以及实现
- mysql longtext查询慢_select中的longtext使查询速度极慢