Set<User> userSet = new HashSet<>(); User user1= new User("aa","11"); User user2= new User("aa","11"); userSet.add(user1); userSet.add(user2); System.out.println("set size"+userSet.size()); Iterator iterator = userSet.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next().toString()); }
创建两个相同的对象 没有重写对象的equals方法和hashcode方法 默认使用object的。并且依次添加到set中,成功添加了两个
@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(pwd, user.pwd); } @Override public int hashCode() { return Objects.hash(username, pwd); }
重写方法之后只添加成功了一个对象 set的大小为1
如果只是重写equals方法 不重写hashcode方法 set中任然有两个对象 并且hashcode不同,set集合区分两个对象是否相同是使用hashcode值进行区分的。
Object类的equals方法 :比较两个对象是否是同一个引用 java.lang.Object
public boolean equals(Object obj) { return (this == obj); }
关于equals方法和hashcode方法。
注:String类型的equals方法 只比较内容 不比较是否来引用同一个对象
public static void main(String[] args) { Set<User> userSet = new HashSet<>(); User user1= new User("aa","11"); User user2= new User("aa","11"); userSet.add(user1); userSet.add(user2); System.out.println("set size"+userSet.size()); Iterator iterator = userSet.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next().toString()); } System.out.println("equals?:"+user1.equals(user2)); System.out.println("user1:hashcode:"+user1.hashCode()); System.out.println("user2:hashcode:"+user2.hashCode()); } } class User{ String username; String pwd; public User(String username, String pwd) { this.username = username; this.pwd = pwd; } @Override public String toString() { return "User{" + "username=‘" + username + ‘\‘‘ + ", pwd=‘" + pwd + ‘\‘‘ + ‘}‘; } @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(user.pwd,pwd); } }
原文地址:https://www.cnblogs.com/zhy-study/p/9386436.html
时间: 2024-10-12 13:36:02