package com.tarena.corejava.day10;
/**
* 该类展示equals/hashCode两个方法的实际开发中的标准写法
* @author Administrator
*
*/
public class TestEqualsHashCode {
private int id;
private String name;
public TestEqualsHashCode(int id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object obj) {
if(obj == null) return false;
if(this.getClass()==obj.getClass()){//利用反射取确切的类型
TestEqualsHashCode tec = (TestEqualsHashCode)obj;
return tec.id == this.id;//比较基本数据类型用==
//return tec.name.equals(this.name);//比较引用类型用equals
}
return false;
}
@Override
public int hashCode() {
int type = this.getClass().hashCode();
int code = type*31+id;
System.out.println("Hash码"+code);
return code;
//return type*31 +name.hashCode();//返回引用类型的hashCode的方法,引用.hashCode
}
public static void main(String[] args) {
TestEqualsHashCode tec1 = new TestEqualsHashCode(1,"alpha");
TestEqualsHashCode tec2 = new TestEqualsHashCode(2,"jack");
TestEqualsHashCode tec3 = new TestEqualsHashCode(1,"alpha");
System.out.println(tec1.equals(tec2));
System.out.println(tec1.equals(tec3));
if(tec1.hashCode() == tec2.hashCode()){
System.out.println("hashCode相同");
}else{
System.out.println("hashCode不相同");
}
}
}
分享到:
相关推荐
重写equals和hashcode方法,学习和进步
Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.
这里是一个文档,里边讲解了hashCode与equals方法使用,大家要是不明白,可以去看看
关于重写equals,hashcode以及compareTo方法!
主要介绍了重写hashCode()和equals()方法详细介绍,涉及重写equals()方法,重写hashCode()方法,重写equals()而不重写hashCode()的风险等相关内容的介绍,具有一定借鉴价值,需要的朋友可以参考下
本文介绍了Java语言不直接支持关联数组,可以使用任何对象作为一个索引的数组,但在根Object类中使用 hashCode()方法明确表示期望广泛使用HashMap。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式...
NULL 博文链接:https://zpointer.iteye.com/blog/1058337
NULL 博文链接:https://jackosn-liao.iteye.com/blog/528757
本文中详细的阐述了Java中经常遇到的equals、hashcode以及“==”号三者之间的区别
文章目录1、hashCode与equals两者之间的关系2、== 和equals的区别`3、为什么要重写equals()方法?4、重写equals()方法5、为什么要重写hashCode()方法?6、什么时候需要重写hashCode()方法?7、重写hashCode()方法: ...
equals()和hashcode()这两个方法都是从object类中继承过来的。当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法.
但是为什么JavaDoc明确的告诉我们, hashCode()和equals()要一起重写呢?原因是因为,在Java自带的容器HashMap和HashSet中, 都需同时要用到对象的hashCode()和equals()方法来进行判断,然后再插入删除元素,这点...
主要介绍了Java重写equals及hashcode方法流程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
为什么重写equals方法,还必须要重写hashcode方法
1、何时需要重写equals() 当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念)。 2、为什么改写equals()的时候,总是要改写hashCode() 两个原则: hashCode()的返回值和equals()的关系...
要注意的是List,Set,Queue继承了Collection接口,...这里想用一个简单的例子展示一下他们的使用,内容包括:List、Map、Set、Queue,Collections、Comparable与Comparator,排序、搜索,内部类,泛型、重写equals、hashCode
面试官瞬间就饱了,重写equals函数,需要重写hashCode函数吗? 面试官问我,为什么重写equals函数,必须重写hashCode函数,我当时就懵住了。 然后扯天扯地,然后面试官瞬间就饱了,痛定思痛,写下这篇博客 首先看...
下面小编就为大家带来一篇java中重写equals()方法的同时要重写hashcode()方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
首先我们先来看下String类的源码:可以发现String是重写了Object类的equals方法的,并且也重写了hashcode方法