码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-07-29 19:27:41      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:hashcode   his   object类   rgs   user   使用   对象   tcl   hash   

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集合判断对象重复的方法

标签:hashcode   his   object类   rgs   user   使用   对象   tcl   hash   

原文地址:https://www.cnblogs.com/zhy-study/p/9386436.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!