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

来源:互联网 发布:2016印度宏观经济数据 编辑:程序博客网 时间:2024/06/06 17:39

一、前言

      前几天,给一个同事写接口,他的要求是,给我传来一个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不到的!
      只要自己有想法,百度和谷歌都会有相似的方案,这个就是现在互联网的特点,小编总结的这些东西也是从网上找到的。加油!