hasCode in Java

标签(空格分隔): Java,HashCode


接上文如何区分同一Class的不同实例对象,继续深入研究HashCode

一般我们新定义的一个Class类,都会有一个hashCode()方法,他是继承自Object根类。我们可以查看源码,翻译过来说明如下:

hashcode方法返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表。

hashCode 的常规协定是:
在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
如果根据 equals(Object) 方法,两个对象是相等的,那么在两个对象中的每个对象上调用 hashCode 方法都必须生成相同的整数结果。
以下情况不 是必需的:如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么在两个对象中的任一对象上调用 hashCode 方法必定会生成不同的整数结果。但是,程序员应该知道,为不相等的对象生成不同整数结果可以提高哈希表的性能。
实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)

当equals方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

以上这段官方文档的定义,我们可以抽出成以下几个关键点:

  1. hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的;
  2. 如果两个对象相同,就是适用于equals(java.lang.Object) 方法,那么这两个对象的hashCode一定要相同;
  3. 如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点;
  4. 两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结构中,如Hashtable,他们“存放在同一个篮子里”。

参考:
Java中hashCode的作用

转载于:https://www.cnblogs.com/baininghan/p/4222026.html

hasCode in Java相关推荐

  1. java服务器访问接口提示network error_北京JAVA开发三年,拿到美团35K的offer面试心得...

    前言 长文干货提示,文章为大家完整记录了一位在北京做了3年的JAVA开发的朋友,如何通过美团的面试及拿到35K的offer.全篇内容由全程电话录音再手打腾稿,原创手打不易,请记得三连支持! 文章末尾有 ...

  2. Java HasCode equals == 的区别

    == 用来判断两个值,或者两个对象的内存地址是否一样. equals equals 方法用来判断两个对象是否相等.equals 是Object 类的方法,默认情况下,比较两个对象是否是同一个对象,内部 ...

  3. Java基础语法:重写equals方法和hasCode方法

    目录 一.为什么需要重写equals和hasCode方法 二.equals和hasCode解读 1.equals方法 2.hasCode方法 三.重写 四.参考资料 一.为什么需要重写equals和h ...

  4. java hascode

    有部分代码如下: Cat cat=new Cat("Kitty",2); system.out.println(cat): 问题:输出什么? 调用并执行toString()方法,两 ...

  5. Java面试之Java基础下册(含答案)

    动态代理与cglib实现的区别. 动态代理有两种实现方式,分别是:jdk动态代理和cglib动态代理 jdk动态代理的前提是目标类必须实现一个接口,代理对象跟目标类实现一个接口,从而避过虚拟机的校验. ...

  6. Java面试之Java基础上册(含答案)

    JAVA中的几种基本数据类型是什么,各自占用多少字节. int 32bit short 16bit long 64bit byte 8bit char 16bit float 32bit double ...

  7. Java学习笔记19

    Objects是Java 7新增的一个工具类,它提供了一些工具方法来操作对象,这些工具方法大多是"空指针"安全的. Objects实现的方法如下: (1)hasCode(Objec ...

  8. Java学习笔记13

    Object类是所有类.数组.枚举类的父类,是类层次结构的根类.每个类都使用Object作为超类.所有对象(包括 数组)都实现这个类的方法. Object类实现了以下方法: 我们来看看源码中hashC ...

  9. Java的equals() 和 hashCode()

    2019独角兽企业重金招聘Python工程师标准>>> 首先,equals()方法和hashCode()方法都来自于Object类的定义,Java类都继承了这两个方法,都定义了自己的 ...

最新文章

  1. 【HTTP协议】域名
  2. sqoop 常见错误以及处理方式
  3. iOS中EXC_BAD_ACCESS解决办法
  4. 延期毕业,只因实验用的鱼被野猫偷吃了………
  5. linux常见基础服务,常用的linux命令的基本使用(一)
  6. Docker 制作自定义化的Tomcat镜像
  7. 做系统ghost步骤图解_掌握这几个步骤电脑小白也会做系统
  8. timequest静态时序分析学习笔记之工具使用
  9. 代码查看工具_不好用打我 | 六个前端开发在线工具推荐
  10. MySQL 5.7: Page Cleaner的刷脏问题
  11. 基于python的opc读写和导入MSSQL/MYSQL的KepOPC中间件
  12. uni-app地址四级联动
  13. 京东返利PHP采集关键字,php-爬虫练习:抓取京东商品列表与详情-2019年10月18日...
  14. CMOS图像传感器工作原理
  15. Edge浏览器设置网速限制
  16. React中关于props的那些事
  17. Win32控制台应用程序如何调用另一个.exe
  18. ilove中文_iLovePDF中文版|iLovePDF(PDF万能工具箱) V0.9.662 官方版 下载_当下软件园_软件下载...
  19. 顶级程序员的成长之路2
  20. C语言中延迟作用,c语言delay的用法

热门文章

  1. c# 找出目录下的所有子目录_C#遍历文件夹,其实只需要一句话!
  2. sql 在某段时间_解Bug之路记一次中间件导致的慢SQL排查过程
  3. 目标跟踪算法的分类(二)
  4. 服务器下最大能容量多少文件,windows下一个文件夹下面最多可以放多少文件(ntfs格式略过)...
  5. 跨栏表格位置跑到了下一页_LaTeX双栏模板插入通栏公式(跨栏插图)
  6. block的理解 ios_iOS面试--字节跳动最新iOS开发面试题
  7. Linux 启动snort服务,在 Ubuntu 15.04 中如何安装和使用 Snort
  8. 属性值动态调整_【第1603期】CSS 自定义属性:使用篇
  9. 的内怎么放_燕窝买回来怎么炖?资深窝友告诉你!
  10. 防止网线中的信号衰减很重要