Java 中 List 对象去除重复

本文探讨了如何在Java中从List类型的实体类对象中去除重复元素,聚焦于实现列表数据的唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.List 实体类对象去重

1.1 Person 实体类 需重写 hashCode()、equals() 

	equals() 方法 比较Person属性,比较地址相等 进行instanceof类型匹配,然后是逐个属性判断,int、String 类型判断方式不同
	关于hashCode()方法,一致约定是:重写equals方法的对象必须同时重写hashCode方法。这个方法返回对象的散列码,返回值int类型的散列码,根据对象的地址来转换成成为此对象的散列码,结果是把所有的分量都总和起来,并不是简单的相加。是以选中一个倍乘的数字31计算 然后不断递归,直到所有字段有参与。
public class Person {

    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (!(o instanceof Person))
            return false;
        Person person = (Person)o;
        if (id != person.id) return false;
        if (age != person.age) return false;
        return name != null ? name.equals(person.name) : person.name == null;
    }

    @Override
    public int hashCode() {
        int result = id;
        result = 31*result + (name != null ? name.hashCode() :0);
        result = 31*age;
        return result;
    }
}

1.2 通过HashSet 去重 代码如下:

List<Person> persons = new ArrayList<Person>();
for (int i=0;i<3;i++){
    Person person = new Person();
    person.setId(i);
    person.setName("ll");
    persons.add(person);
}
for (int i=0;i<6;i++){
    Person person = new Person();
    person.setId(i);
    person.setName("ll");
    persons.add(person);
}
Log.e("去重前List个数",""+persons.size());
Set<Person> set = new HashSet<Person>(persons);
for (Person p: set){
    Log.e("去重后对象:",""+p.getId() +" , "+p.getName());
}
打印结果:
03-21 12:01:30.064 28719-28719/supconit.com.azpt E/去重前List个数: 9
03-21 12:01:30.064 28719-28719/supconit.com.azpt E/去重后对象:: 5 , ll
03-21 12:01:30.064 28719-28719/supconit.com.azpt E/去重后对象:: 4 , ll
03-21 12:01:30.064 28719-28719/supconit.com.azpt E/去重后对象:: 3 , ll
03-21 12:01:30.064 28719-28719/supconit.com.azpt E/去重后对象:: 2 , ll
03-21 12:01:30.064 28719-28719/supconit.com.azpt E/去重后对象:: 1 , ll
03-21 12:01:30.064 28719-28719/supconit.com.azpt E/去重后对象:: 0 , ll

2. List String类型去重:

String[] strings = {"8","8","9","7","0"};
List<String> stringList = Arrays.asList(strings);
Set<String> s = new HashSet<String>(stringList);
Log.e("String去重:", "" + s.size());

欢迎大家指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值