Java重写equals方法实现去重
2017-04-25 18:10
337 查看
我们经常会遇到一些业务,要对数据进行去重,我们可能首先想到的就是重写equals方法,但是结果却不尽人意,这是为啥呢?其实还需要重写hashCode方法,因为光重写equals方法是不够的
package com.eicky; public class Test { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public boolean equals(Object obj) { if (obj == null){ return false; } if (this == obj){ return true; } if (obj instanceof Test){ Test o = (Test) obj; return this.id == o.id; } return false; } @Override public int hashCode() { return id; } /** * 这个是考虑到如果id是Integer类型的时候,没有具体值的时候就使用里面字符串的hashCode *我们知道Java所有的类都是继承Object的,所有的类也都继承了Object的方法和属性 * eg: toString()、hashCode()、equals()等 */ //@Override //public int hashCode() { // return name.hashCode(); //} }
啰嗦几句:
当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true
当obj1.hashCode() == obj2.hashCode()为false时,obj1.equals(obj2)必须为false
重写这两个方法的作用就是为了去重,方式就不用多说了吧(Set什么的都能玩).
我们默认的去比对是否相同是比对的地址,而重写这两个方法就相当于比较两个对象是否相同就是去比对对象里面的内容
相关文章推荐
- Java重写equals方法实现去重
- java重载与重写的区别+重写父类equals方法的完美实现
- Java中equals()方法重写实现代码
- 重写Java Object对象的hashCode和equals方法实现集合元素按内容判重
- java重载与重写的区别+重写父类equals方法的完美实现
- JAVA重写equals和hashCode方法实现不定项分类统计
- 重写Java Object对象的hashCode和equals方法实现集合元素按内容判重
- JAVA中重写equals()方法为什么要重写hashcode()方法说明
- JAVA中重写equals()方法为什么要重写hashcode()方法说明
- java 重写equals方法
- java对象通用方法之覆盖equals时请遵守通用约定、覆盖equals时总要覆盖hashCode、始终要覆盖toString、考虑实现Comparable接口
- java 重写类的equals方法和hashcode方法
- 普通java类(排序)实现Comparable接口重写CompareTo方法
- java对象equals方法的重写
- java对象equals方法的重写
- java equals与hashCode 两个重要方法的重写
- Java中重写Object类的equals方法和hashcode方法的注意事项
- java对象equals方法的重写
- java中重写Object类的equals方法和Hashcode方法的注意事项
- Java实现equals方法