相信大家在很多需求中遇到过这个问题,就是去除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