• hashcode的作用

  hashCode()方法是从Object类继承过来的,Object类中的hashCode()方法返回的是对象在内存中地址转换成的int值,如果对象没有重写hashCode()方法,任何对象的hashCode()方法的返回值都是不相等的。

  重写方法:java中的hashCode方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作散列值。

主要作用是用于查找的,为了配合基于散列的集合一起正常运行,这样的散列集合包括HashSet、HashMap以及HashTable,hashCode是用来在散列存储结构中确定对象的存储地址的。

 1 import java.util.HashSet;
 2 import java.util.Set;
 3
 4 /**
 5  * Created by nick on 2018/9/29.
 6  */
 7 public class HashTest {
 8     private int i;
 9     public int getl(){
10         return i;
11     }
12     public void setl(int i){
13         this.i=i;
14     }
15     public boolean equals(Object object){
16         if(object==null){
17             return  false;
18         }
19         if(object==this){
20             return true;
21         }
22         if(!(object instanceof HashTest))
23             return false;
24         HashTest other =(HashTest) object;
25         if(other.getl()==this.getl()){
26             return true;
27         }
28         return false;
29     }
30     public int hashCode(){
31         return i%10;
32     }
33
34     public static void main(String[] args) {
35         HashTest a=new HashTest();
36         HashTest b=new HashTest();
37         a.setl(1);
38         b.setl(1);
39         Set<HashTest> set= new HashSet<HashTest>();
40         set.add(a);
41         set.add(b);
42         System.out.println(a.hashCode()==b.hashCode());
43         System.out.println(a.equals(b));
44         System.out.println(set);
45     }
46 }

View Code

结果:

false
true
[HashTest@677327b6, HashTest@1540e19d]

a的hashcode为1;b的hashcode是:1

如果不重写hashcode的结果:

false
true
[HashTest@677327b6, HashTest@1540e19d]

a的hashcode为356573597;b的hashcode是:1735600054

java对于equals()方法和hashCode()方法是这样规定的:

1.如果两个对象的equals()方法返回true,则hashCode()返回值相同。

2.如果2个对象的equals)()方法返回false,则hashCode()返回的值可能相同,也可能不相同。

3.如果2个对象的hashCode()方法返回值相同,则equals()返回的值可能为true,也可能为false。

4.如果2个对象的hashCode()方法返回值不同,则equals()返回的值为false

  • 为什么重写equals方法一样要重写hashcode:

  hashCode()和equals()保持一致,如果equals方法返回true,那么两个对象的hasCode()返回值必须一样。如果equals方法返回false,hashcode可以不一样,但是这样不利于哈希表的性能,一般我们也不要这样做。重写equals()方法就必须重写hashCode()方法的原因也就显而易见了。

假设两个对象,重写了其equals方法,其相等条件是属性相等,就返回true。如果不重写hashcode方法,其返回的依然是两个对象的内存地址值,必然不相等。这就出现了equals方法相等,但是hashcode不相等的情况。这不符合hashcode的规则。下边,会介绍在集合框架中,这种情况会导致的严重问题。

--------------------- 本文来自 冷面寒枪biu 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u013679744/article/details/57074669?utm_source=copy

转载于:https://www.cnblogs.com/nickup/p/9722432.html

java基础学习(一)hashcode相关推荐

  1. java基础学习-6

    Java基础学习-6 双列集合 Map的常见API Map的遍历方式 HashMap 小练习 LinkedHashMap TreeMap TreeMap--小练习1 TreeMap--小练习2 Tre ...

  2. JAVA基础学习精简心得笔记整理

    JAVA基础学习精简心得笔记整理 配置java环境变量 Java的运行过程  基本数据类型 引用数据类型 逻辑运算符 数组 方法重载 封装 继承 多态 多态的作用 单例设计模式 接口interface ...

  3. Java基础学习——第十六章 Java8新特性

    Java基础学习--第十六章 Java8 新特性 Java8(JDK8.0)较 JDK7.0 有很多变化或者说是优化,比如 interface 里可以有静态方法和默认方法,并且可以有方法体,这一点就颠 ...

  4. java基础学习整理(一)

    java基础学习整理(一) lesson1: D0s命令: 1.回到根目录,>cd \ 2.复制命令行下的内容,右击标记所要复制的内容,这样就已经复制好了,右击粘贴就可以了. 3.查看,设置环境 ...

  5. 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结

    Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 4.1 class作为成员变量 4.2 interface作为成 ...

  6. Java中大数据数组,Java基础学习笔记之数组详解

    摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...

  7. java基础学安卓开发_Android开发学习路线之Java基础学习

    原标题:Android开发学习路线之Java基础学习 很多Android学习开发者刚入手Android开发技术时,稍微有点迫切.任何的开发技术都有其基础语言,Android应用程序开发是以Java语言 ...

  8. Java基础学习:尚硅谷项目三 开发团队调度软件

    Java基础学习:尚硅谷项目三 开发团队调度软件 一.软件功能与结构设计 1. 软件功能 该软件实现以下功能: 软件启动时,根据给定的数据创建公司部分成员列表(数组) 根据菜单提示,基于现有的公司成员 ...

  9. Java基础学习汇总

    Java基础学习汇总 java语言基础 java函数和数组 java面向对象 java异常 整理用,早就停更... 写作不易,如果您觉得写的不错,欢迎给博主点赞.收藏.评论.收藏来一波~让博主更有动力 ...

  10. 尚学堂JAVA基础学习笔记_2/2

    尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...

最新文章

  1. Java中几个常见的关键字
  2. 全球及中国蔬菜泥配料行业竞争策略及投资潜力研究报告2021-2027年版
  3. VC6、BC5、G2.9标准分配器一览
  4. Android Studio-------添加按钮
  5. OpenCV中基本数据结构(1)_Point
  6. [ActiveRecord] 之ActiveRecordMediator
  7. MP4视频播放器代码
  8. word自带公式编辑_原来有这样几种方式打开Word中的公式编辑器
  9. Ubuntu 实时显示网速
  10. 程序猿给娃取名的正确姿势
  11. opencv显示图片只显示部分(或认为图片太大)
  12. 程序员很少上《非诚勿扰》电视节目相亲之分析
  13. Prometheus入门使用(三)
  14. 国内外大数据可视化分析产品点评
  15. 湖南大学计算机考试题,湖南大学计算机组成原理期中考试题库
  16. 青龙面板+Ninja的企业微信通知设置以及企业微信群消息转到微信方法
  17. PHP—文件打开/读取
  18. .net SSO单点登录mvc
  19. Web:选择器的种类
  20. 基于微信小程序云开发(校园许愿墙app)妄想替代学校的表白墙

热门文章

  1. cocos2d-x lua table数据存储
  2. SwitchHosts-win32-x64
  3. 开始学习一个指令 directive 并了解指令的意义
  4. 关于 underscore 中模板引擎的应用示例
  5. JQ:当页面滚动到一定位置之后,让元素固定在顶部,小于位置后恢复原来的位置
  6. SubVersion服务器Windows安装过程
  7. python课堂整理15---map, filter,reduce函数
  8. JavaScript 几种排序算法实现(冒泡、选择、插入、归并、快速排序)
  9. 跨站脚本攻击(selfxss)笔记(三)
  10. JAVA中数组Array与List互转