案例一
没有重写hashCode 和equals()
public class User { private String userName; private Integer age; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } public class Main { public static void main(String[] args) { HashSet<User> set = new HashSet<>(); User user = new User(); user.setAge(20); set.add(user); System.out.println(set.contains(user)); user.setAge(21); System.out.println(set.contains(user)); } } true true Process finished with exit code 0
案例二
重写了 hashCode 和equals()
public class User { private String userName; private Integer age; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @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(userName, user.userName) && Objects.equals(age, user.age); } @Override public int hashCode() { return Objects.hash(userName, age); } } public class Main { public static void main(String[] args) { HashSet<User> set = new HashSet<>(); User user = new User(); user.setAge(20); set.add(user); System.out.println(set.contains(user)); user.setAge(21); System.out.println(set.contains(user)); } } true false Process finished with exit code 0