去除集合中自定义对象的重复值,根据情况定义对象的成员变量值相同为重复

在HashSet集合中添加三个Person对象,把姓名相同的人当做同一个人,禁止重复添加。可以定义Per son类中包含name和age属性,重写hashCode()方法和equals()方法,针对Person类的name属性进行比较,如果name相同,hashCode()方法的返回值相同,equals方法返回true。

public class Person {
private String name;
private Integer age;

public Person(String name, Integer age) {
    this.name = name;
    this.age = age;
}

@Override
public String toString() {
    return "Person{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof Person)) return false;
    Person person = (Person) o;
    return Objects.equals(name, person.name);
}

@Override
public int hashCode() {
    return Objects.hash(name);
}

public static void main(String[] args) {
    Set<Person> personSet = new HashSet<>();
    Person person = new Person("张三",6);
    Person person2 = new Person("李四",6);
    Person person3 = new Person("张三",8);
    Person person4 = new Person("李四",9);
    personSet.add(person);
    personSet.add(person2);
    personSet.add(person3);
    personSet.add(person4);
    personSet.forEach(item ->{
        System.out.println(item);
    });
    
}

}