1. 程式人生 > >Set集合判斷對象重復的方法

Set集合判斷對象重復的方法

set集合 rgs pwd 依次 code style nbsp string類 println

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);
    }
}

Set集合判斷對象重復的方法