一、Set集合去重
Set接口继承了 Collection 接口,Set 集合中的元素不按特定的方式排序,并且没有重复的元素。因此,可以使用 Set 接口来去除 List 中的重复元素。下面是示例代码:
Listlist = new ArrayList<>(); list.add("apple"); list.add("banana"); list.add("banana"); list.add("orange"); Set set = new HashSet<>(); set.addAll(list); list.clear(); list.addAll(set); System.out.println(list);
输出结果为: [orange, apple, banana]
上面的代码中,我们首先定义了一个ArrayList,并向里面添加了若干个元素,其中 banana 重复了两次。接着,我们生成了一个 HashSet 集合,调用addAll()方法将 list 集合的元素添加到 HashSet 集合中,由于Set集合中不允许重复,因此就去重了。最后将去重后的Set集合元素以列表的形式返回到原来的 list 集合中。
二、Map去重
Map中的键是唯一的,因此我们可以使用Map来实现List去重,将重复的元素作为键,不存入值,最后将键以列表的形式输出即可。
Listlist = new ArrayList<>(); list.add("apple"); list.add("banana"); list.add("banana"); list.add("orange"); Map map = new HashMap<>(); for (String str : list) { map.put(str, new Object()); } list.clear(); list.addAll(map.keySet()); System.out.println(list);
输出结果为: [orange, apple, banana]
上面的代码中,我们首先定义了一个ArrayList,并向里面添加了若干个元素,其中 banana 重复了两次。接着,我们生成了一个 HashMap 集合,并将 list 集合中的所有元素作为键,不存入值。由于HashMap中的键是唯一的,因此就去重了。最后将去重后的键以列表的形式返回到原来的 list 集合中。
三、使用Java 8 Lambda表达式去重
Java 8引入的 Lambda 表达式是一种更加简洁方便的写法,我们可以使用Lambda表达式来简化List去重操作。
Listlist = new ArrayList<>(); list.add("apple"); list.add("banana"); list.add("banana"); list.add("orange"); list = list.stream().distinct().collect(Collectors.toList()); System.out.println(list);
输出结果为: [orange, apple, banana]
上述代码使用了 stream().distinct().collect(Collectors.toList()) 的语法,很容易理解,其中 stream 表示返回一个流,distinct()表示去重,collect(Collectors.toList())表示将流转换成一个列表。
四、使用TreeSet去重
将List转换成Set时,一般使用HashSet,但HashSet的顺序是不可预测的。如果想让去重后的List有一定的排序规则,可以使用 TreeSet。
Listlist = new ArrayList<>(); list.add("banana"); list.add("orange"); list.add("apple"); list.add("banana"); Set set = new TreeSet<>(); set.addAll(list); list.clear(); list.addAll(set); System.out.println(list);
输出结果为: [apple, banana, orange]
上述代码中,我们将List转换成 TreeSet,并将去重后的元素添加到原来的List中。TreeSet 会为元素进行排序,所以最后的输出结果是一个排序后的 List。
五、使用LinkedHashSet去重
LinkedHashSet 是 HashSet 的子类,在 HashSet 的基础上为元素维护了插入顺序,因此也可以用来去重并保留元素的顺序。
Listlist = new ArrayList<>(); list.add("banana"); list.add("orange"); list.add("apple"); list.add("banana"); Set set = new LinkedHashSet<>(); set.addAll(list); list.clear(); list.addAll(set); System.out.println(list);
输出结果为: [banana, orange, apple]
上述代码中,我们将List转换成 LinkedHashSet,并将去重后的元素添加到原来的List中。LinkedHashSet 会按元素插入的顺序保留元素,并且去重。因此,最后的输出结果是一个按照插入顺序排序后的 List。
六、使用Apache Commons Collections去重
Apache Commons Collections 是一个开源的 Java 类库,提供了一系列的数据结构和算法的实现,可以用来拓展 Java 的集合框架。这个集合库中也提供了一些去重操作的工具。下面是示例代码:
Listlist = new ArrayList<>(); list.add("banana"); list.add("orange"); list.add("apple"); list.add("banana"); List results = new ArrayList<>(new LinkedHashSet<>(list)); System.out.println(results);
输出结果为: [banana, orange, apple]
上述代码中,我们使用了 Apache Commons Collections 的 LinkedHashSetList 类,它是一个链式散列集合,它维护元素插入的顺序,并且不含重复元素。我们将原来的 List 传入 LinkedHashSetList 中,即可实现去重并保留元素的顺序。