List集合的去重问题

大家都知道,set集合的特点就是没有重复的元素。如果集合中的数据类型是基本数据类型,可以直接将list集合转换成set,就会自动去除重复的元素,这个就相对比较简单。

如下例:

public class Test {

    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(11);
        list.add(12);
        list.add(13);
        list.add(14);
        list.add(15);
        list.add(11);
        System.out.println(list);

        Set set = new HashSet();
        List newList = new ArrayList();
        set.addAll(list);
        newList.addAll(set);
        System.out.println(newList);

    }

}

运行结果发现去重成功了。


但是,当list集合中存储的类型是对象类型的时候,我们就不能简单的只把list集合转换成set集合。解释这个原因很简单,首先了解:如何去重?

一般我们肯定先比较两个变量是不是相等的。

       对于字符型、整型等简单变量,java就有它们的比较机制。但是对于我们用户自定义的变量即对象来说,java也有它自己的比较机制,例如比较它们的引用地址值是否相等。

      但是我们一般不比较地址值,例如,一个对象有姓名、学号两个成员变量,比较地址值没有任何现实意义,我们一般会比较对象里的姓名属性是否相等、学号属性是否相等,如果都相等,就认为两个对象相等了。

所以,之所以对象集合去重不能简单的只把list集合转换成set集合就是这个道理,人家是比较地址值的,肯定每个对象地址值都不一样啊,所以转换成set也不会做任何改变。如果想实现转换去重,必须要重写equals方法(同样也要重写hashCode方法),这时人家在比较去重时,就会调用你自己的equals方法来实现比较去重。还有一点就是,set集合你可以添加重复的对象,但是它会把之前的那个对象删掉,把这个新对象加入。

这里可以参考下equals的重写问题https://blog.csdn.net/qq_36923376/article/details/83652958

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值