通过自定义对象equals和hashcode方法实现hashset方法去重

49 阅读2分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

可以通过自定义对象equals和hashcode方法实现hashset方法去重,对对象的某个字段相等就可以认定为同一对象,自定义比较方法,hashset会使用对象的自定义方法

@Override
public boolean equals(Object obj){
    if(obj == null){
        return false;
    }else {
        if(this.getClass() == obj.getClass()){
            ThreatDTO u = (ThreatenLogEqualsDTO) obj;
            if(this.getSrc().equals(u.getSrc())){
                return true;
            }else{
                return false;
            }

        }else{
            return false;
        }
    }
}

@Override
public int hashCode() {//重写hashCode()方法
    final int prime = 31;
    int result = 1;
    result = prime * result + src.hashCode();
    return result;
   }

hashset的使用 当我们需要存入不重复的数据时就需要用到hashset,而hashset的不重复的秘密就依赖于equals方法和 hashCode方法。

知识引入:什么是哈希表呢?

哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时的位置比较特殊,当需要把这些对象给数组中存放时,那么会根据这些对象的特有数据结合相应的算法,计算出这个对象在数组中的位置,然后把这个对象存放在数组中。而这样的数组就称为哈希数组,即就是哈希表。

hashCode方法作用: 当向哈希表中存放元素时,需要根据元素的特有数据结合相应的算法,这个算法其实就是Object类中的hashCode方法。 总结:运用特殊的算法生成一个哈希数用于给存入的元素定存放的位置。 equals方法的作用: 用于判断存入的数据是否与集合中的数据重复。 举个例子当存入的两个不同的数据经过hashCode方法计算后恰巧得到了相同的哈希数,此时就需要比较他们的内容是否相同。 总结:比较内容是否相同 1.给HashSet中存储JavaAPI中提供的类型元素时,不需要重写元素的hashCode和equals方法,因为这两个方法,在JavaAPI的每个类中已经重写完毕,如String类、Integer类等。

public class student {
    private int age ;
    private String name;
    @Override
    public student(String name, int age) {
        super();
        this.name=name;
        this.age=age;
    }
    public String toString() {
        return "student [age=" + age + ", name=" + name + "]";
    }
    public void setage(int age) {
        this.age=age;
    }
    public int getage() {
        return age;
    }
    public void stename(String name) {
        this.name=name;
    }
    public String  getname() {
        return name;
    }