HashSet去重:先判断hashCode()是否相同,相同才会判断equals()
如果是需要对我们自定义的对象去重,就需要我们重写 hashCode 和 equals 方法
注意:HashSet要求放入的对象必须重写hashCode(),不然HashSet调用默认的hashCode方法判断对象的地址,不等就达不到想根据对象的值去重的目的。
package com.huang;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
public class Test {
public static void main(String[] args) {
User u = new User(10,"张三");
User u2 = new User(10,"张三");
User u3 = new User(10,"里斯");
Set<User> set = new HashSet<>();
set.add(u);
set.add(u2);
set.add(u3);
for (User user : set) {
System.out.println(user.age + user.name);
}
}
private static class User {
String name;
Integer age;
public User(){
}
public User(Integer age, String name){
this.age = age;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(name, user.name) &&
Objects.equals(age, user.age);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
}
执行结果如下,去重成功