List去重

    xiaoxiao2024-01-13  172

    相信大家在很多需求中遇到过这个问题,就是去除list集合中的重复值,大部分是采用一下几种方法:

    1、最简单直接的方式

    循环嵌套去重复数据

    // 第一种去重复方法 public void Test1() { List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("4"); list.add("3"); list.add("2"); list.add("1"); System.out.println("去重复元素之前:"); for (String s : list) { System.out.println(s); } // 遍历ArrayList for (int i = 0; i < list.size() - 1; i++) { for (int j = i + 1; j < list.size(); j++) { if (list.get(i).equals(list.get(j))) { list.remove(j); } } } System.out.println(list.size()); System.out.println("去重复元素之后:"); for (String s : list) { System.out.println(s); } }

    2、判断赋值给新的List

    //遍历后判断赋给另一个list集合 public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("aaa"); list.add("aba"); list.add("aaa"); List<String> newList = new ArrayList<String>(); for (String cd : list) { if(!newList.contains(cd)) { newList.add(cd); } } System.out.println( "去重后的集合: " + newList); }

    3、用赋给set集合再返回给list集合

    set集合是无需不重复的

    //set集合去重,不打乱顺序 public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("aaa"); list.add("aba"); list.add("aaa"); Set set = new HashSet(); List newList = new ArrayList(); for (String cd : list) { if(set.add(cd)) { newList.add(cd); } } System.out.println( "去重后的集合: " + newList); } //set去重 不用循环 public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("aaa"); list.add("aba"); list.add("aaa"); Set set = new HashSet(); List newList = new ArrayList(); set.addAll(list); newList.addAll(set); System.out.println( "去重后的集合: " + newList); }

    4、使用treeset进行去重并排序

    hashset不进行排序,还有一种方法是用treeset,去重并且按照自然顺序排列,将hashset改为treeset就可以了。(原本的顺序是改变的,只是按照字母表顺序排列而已)

    //去重并且按照自然顺序排列 List newList = new ArrayList(new TreeSet(list));

    5、用JDK1.8 Stream中对List进行去重

    首先获得此list的Stream.然后调用distinct()方法,java8中提供流的方式对数据进行处理,非常快,底层用的是forkJoin框架,提供了并行处理,使得多个处理器同时处理流中的数据,所以耗时非常短 。

    list.stream().distinct();

     

    参考:https://blog.csdn.net/tangyaya8/article/details/80640893

               https://blog.csdn.net/weixin_42386685/article/details/80927540

    最新回复(0)