HashSet添加对象去重

来源:互联网 发布:java字符流写文件 编辑:程序博客网 时间:2024/05/17 23:30

1.去重原理

        根据hashCode和equals方法去重。

     先比较hashCode是否相等,若hashCode相等则不添加,若不相等,则再比较equals方法,若equals方法也相等,则往集合添加元素,否则不添加。

    注意:hashSet的底层其实是一个HashMap的key值,不允许重复,详情看jdk源码。

 2.代码示例

      2.1实例对象(hashCode和equals方法Elipse自动生成即可,也可以按业务编写)

package Test;public class User {    public User(String name, int age) {        this.name = name;        this.age = age;    }    private String name;    private int age;    @Override    public int hashCode() {        final int prime = 31;        int result = 1;        result = prime * result + age;        result = prime * result + ((name == null) ? 0 : name.hashCode());        return result;    }    @Override    public boolean equals(Object obj) {        if (this == obj)            return true;        if (obj == null)            return false;        if (getClass() != obj.getClass())            return false;        User other = (User) obj;        if (age != other.age)            return false;        if (name == null) {            if (other.name != null)                return false;        } else if (!name.equals(other.name))            return false;        return true;    }}

       2.2测试代码

import java.util.HashSet;import java.util.Set;public class Demo {public static void main(String[] args) {User xiaoming1 = new User("小明", 1);User xiaoming2 = new User("小明", 1);Set<User> set = new HashSet<>();set.add(xiaoming1);set.add(xiaoming2);System.out.println(set.size());}}

        2.3打印结果

       1



原创粉丝点击