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);
}
}
}
執行結果如下,去重成功