Set集合判断对象重复的方法

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

 

posted @ 2018-07-29 19:01  zghgz  阅读(10317)  评论(0编辑  收藏  举报