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