hashcode方法返回该对象的哈希码值,通常用在一些hash集合的处理中,用来存放散列对象。
几个原则:
equals相等 hashcode必须相等
在集合中对象的对比中,hashcode不等则两个对象一定不等
重写equals 则必须重写hashcode,以保证
对象放在HashTable中的时候,首先会查找对象的Hashcode,如果地址中有相应的数据,则用equals来判断对象是否相等,
如果相等则不保存对象,如果不同
代码:
package com.jusfoun.dandelion.dw; import java.util.HashSet; import java.util.Set; public class Person { private int age; private int sex; // 0:男,1:女 private String name; private final int PRIME = 37; Person(int age, int sex, String name) { this.age = age; this.sex = sex; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPRIME() { return PRIME; } /** 省略getter、setter方法 **/ @Override public int hashCode() { System.out.println("调用hashCode方法..........."); int hashResult = 1; hashResult = (hashResult + Integer.valueOf(age).hashCode() + Integer.valueOf(sex).hashCode()) * PRIME; hashResult = PRIME * hashResult + ((name == null) ? 0 : name.hashCode()); System.out.println("name:" + name + " hashCode:" + hashResult); return hashResult; } /** * 重写hashCode() */ public boolean equals(Object obj) { System.out.println("调用equals方法..........."); if (obj == null) { return false; } if (obj.getClass() != this.getClass()) { return false; } if (this == obj) { return true; } Person person = (Person) obj; if (person.getAge() != person.getAge() || getSex() != person.getSex()) { return false; } if (getName() != null) { if (!getName().equals(person.getName())) { return false; } } else if (person != null) { return false; } return true; } public static void main(String[] args) { Set<Person> set = new HashSet<Person>(); Person p1 = new Person(11, 1, "张三"); Person p2 = new Person(12, 1, "李四"); Person p3 = new Person(11, 1, "张三"); Person p4 = new Person(11, 1, "李四"); //只验证p1、p3 System.out.println("p1 == p3? :" + (p1 == p3)); System.out.println("p1.equals(p3)?:"+p1.equals(p3)); System.out.println("-----------------------分割线--------------------------"); set.add(p1); set.add(p2); set.add(p3); set.add(p4); System.out.println("set.size()="+set.size()); } }
返回值如下,每次添加对象都会调用hashCode方法,如果code相同则调用equals相同则不保存:
p1 == p3? :false 调用equals方法........... p1.equals(p3)?:true -----------------------分割线-------------------------- 调用hashCode方法........... name:张三 hashCode:792686 调用hashCode方法........... name:李四 hashCode:861227 调用hashCode方法........... name:张三 hashCode:792686 调用equals方法........... 调用hashCode方法........... name:李四 hashCode:859858 set.size()=3
相关推荐
HashCode相同equals不同的2位字符集合算法 另附ASCII码表
equals()和hashcode()这两个方法都是从object类中继承过来的。当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法.
文章目录1、hashCode与equals两者之间的关系2、== 和equals的区别`3、为什么要重写equals()方法?4、重写equals()方法5、为什么要重写hashCode()方法?6、什么时候需要重写hashCode()方法?7、重写hashCode()方法: ...
这里是一个文档,里边讲解了hashCode与equals方法使用,大家要是不明白,可以去看看
Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.
主要介绍了重写hashCode()和equals()方法详细介绍,涉及重写equals()方法,重写hashCode()方法,重写equals()而不重写hashCode()的风险等相关内容的介绍,具有一定借鉴价值,需要的朋友可以参考下
hashcode、equals、==总结1简单总结.txt,他们之间的区别
本文档详细介绍了set接口为什么会用到hashCode和equals方法以及这两个方法的一些探讨 set不同的实现类用到的这两个方法也不同
java中hashcode和equals的详解.pdf
在这篇文章中,我将告诉大家我对hashCode和equals方法的理解。我将讨论他们的默认实现,以及如何正确的重写他们。我也将使用Apache Commons提供的工具包做一个实现。 hashCode()和equals()定义在Object类中,这...
有许多人学了很长时间的Java,但一直不明白hashCode方法的作用,我来解释一下吧。首先,想要明白hashCode的作用,你必须要先知道Java中的集合。
(注意hashcode与equals的定义,排序依据学号进行)。构造函数中随机生成学生成绩(10个成绩)。定义不同的Comparator,分别按照成绩列表的最高分,最低分,平均分进行排序。求出学生成绩的最高分,最低分,平均分,...
关于hashCode()和equals()的本质区别和联系.doc
hashCode()和equals()定义在Object类中,这个类是所有java类的基类,所以所有的java类都继承这两个方法。下面这篇文章主要给大家介绍了关于java中hashCode、equals的使用方法,需要的朋友可以参考下。
重写equals和hashcode方法,学习和进步
本文还介绍了定义对象的相等性、实施equals()和hashCode()的需求、编写自己的equals()和hashCode()方法。通过统一定义equals()和hashCode(),可以提升类作为基于散列的集合中的关键字的使用性。
更清楚的了解hashcode()和equals()方法。
NULL 博文链接:https://zpointer.iteye.com/blog/1058337
hashcode()和equals() 博客地址:https://blog.csdn.net/qq_36963950/article/details/107543471