【Java】去除List中的重复值并按照从小到大排列

一、前言

      前几天,给一个同事写接口,他的要求是,给我传来一个List<String> ids,这个里面可能有重复的id,需要帮她去重。我想这个用循环是比较麻烦的,有什么简单的吗?然后就找到了下面的几个方法,总结一下。

二、去重思路

      两个思路:

1.遍历List集合判断是否在另一个集合中存在,赋值给另一个集合

2.赋值给Set结合,再返回list集合

      【知识补充】可能有一些朋友对Set不熟悉,不了解Set是什么?

       Set是Collection容器的一个子接口,它不允许出现重复元素,当然也只允许有一个null对象。在这里大家了解,它里面不能放重复的信息就行了。

三、去重方法demo

  • 方法一: 赋值给另一个list2,判断list2是否含有要添加的值(最笨)

      这里判断使用的是,list2.contains(字段)

    @Test
    public void testMap(){
            List<String> list  =   new  ArrayList<String>();
            list.add("6");
            list.add("2");
            list.add("3");
            list.add("1");
            list.add("7");
            list.add("5");
            list.add("2");
            list.add("3");

            List<String> newList = new  ArrayList<String>();
            for (String cd:list) {
                if(!newList.contains(cd)){
                    newList.add(cd);
                }
            }
            System.out.println( "去重后的集合: " + newList);
    }

      结果:可以看出,使用这种方法,可以达到去重的效果,但是集合中是数据依旧是乱的,没有排序。

去重后的集合: [6, 2, 3, 1, 7, 5]
  • 方法二、使用set.add(字段)来判断能否添加到set中,如果可以添加,也向新的list.add()中添加一份,不打乱顺序。
   @Test
    public void testMap(){
            List<String> list  =   new  ArrayList<String>();
            list.add("6");
            list.add("2");
            list.add("3");
            list.add("1");
            list.add("7");
            list.add("5");
            list.add("2");
            list.add("3");

            Set set = new  HashSet();
            List newList = new  ArrayList();
            for (String cd:list) {
                if(set.add(cd)){
                    newList.add(cd);
                }
            }
            System.out.println( "去重后的集合: " + newList);

    }

      结果:同样是达到去重,但是没有排序。

去重后的集合: [6, 2, 3, 1, 7, 5]
  • 方法三、使用Set去重
    @Test
    public void testMap(){
            List<String> list  =   new  ArrayList<String>();
            list.add("6");
            list.add("2");
            list.add("3");
            list.add("1");
            list.add("7");
            list.add("5");
            list.add("2");
            list.add("3");
        //set 去重
        Set set = new  HashSet();
        List newList = new  ArrayList();
        set.addAll(list);
        newList.addAll(set);

        System.out.println( "去重后的集合: " + newList);
     }

      结果:网上有朋友说使用HashSet存储是无顺序的,但是小编亲测,是有顺序的。有待考证

去重后的集合: [1, 2, 3, 5, 6, 7]

      网上还有一个朋友说,使用treeSett,可以去重且按照自然顺序排列

 @Test
    public void testMap(){
            List<String> list  =   new  ArrayList<String>();
            list.add("6");
            list.add("2");
            list.add("3");
            list.add("1");
            list.add("7");
            list.add("5");
            list.add("2");
            list.add("3");
            //去重并且按照自然顺序排列
            List newList = new ArrayList(new TreeSet(list)); 
            System.out.println( "去重后的集合: " + newList);
}

四、小结

      没有百不到的,没有G不到的!
      只要自己有想法,百度和谷歌都会有相似的方案,这个就是现在互联网的特点,小编总结的这些东西也是从网上找到的。加油!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你个佬六

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值