java比较两条list对象取差集,取重复元素

**

取差集

**

方法一:使用循环嵌套遍历比较

一种常见的方法是通过嵌套循环遍历比较两个List对象中的元素。具体步骤如下:

遍历第一个List,对于每个元素,都在第二个List中进行遍历比较。
如果第二个List中没有找到相同的元素,则将该元素加入到差集List中。
返回差集List。
List list1 = Arrays.asList(1, 2, 3, 4, 5);
List list2 = Arrays.asList(3, 4, 5, 6);
List list = new ArrayList<>();
for (Integer element : list1) { boolean found = false;
    for (Integer compareElement : list2) { if (element.equals(compareElement)) { found = true;
            break;
        }
    }
    if (!found) { list.add(element);
    }
}
System.out.println("差集为:" + list);

差集为:[1, 2]

当List较大时,性能可能会受到影响。

方法二:使用Java 8的Stream API

Java 8中引入的Stream API提供了一种更简洁的方式来处理集合数据。通过使用Stream的filter和collect方法,可以轻松地实现取差集的功能。

List list1 = Arrays.asList(1, 2, 3, 4, 5);
List list2 = Arrays.asList(3, 4, 5, 6);
List list = list1.stream()
        .filter(element -> !list2.contains(element))
        .collect(Collectors.toList());
System.out.println("差集为:" + list);

差集为:[1, 2]

相比于方法一,使用Stream API可以更加简洁地实现取差集的功能,并且在处理大型List时性能更好。

方法三:使用Apache Commons Collections库

除了使用Java内置的方法,我们还可以借助第三方库来实现取差集的功能。Apache Commons Collections库提供了一个CollectionUtils类,其中包含了许多方便的集合操作方法。

List list1 = Arrays.asList(1, 2, 3, 4, 5);
List list2 = Arrays.asList(3, 4, 5, 6);
List list = (List) CollectionUtils.subtract(list1, list2);
System.out.println("差集为:" + list);

取重复元素

方法一:使用HashSet

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ListUtils { /**
     * 找出两个List中的重复元素
     * @param list1 第一个List
     * @param list2 第二个List
     * @return 重复的元素集合
     */
    public static  List findDuplicateElements(List list1, List list2) { Set set1 = new HashSet<>(list1); // 将List1转换为Set,去除重复元素
        Set duplicateSet = new HashSet<>();
        
        for (T element : list2) { // 遍历List2的元素
            if (set1.contains(element)) { // 如果Set1中包含List2的元素
                duplicateSet.add(element); // 将重复的元素添加到重复元素的Set中
            }
        }
        
        return new ArrayList<>(duplicateSet); // 将重复元素的Set转换回List并返回
    }
}

方法二:使用Stream API

import java.util.*;
import java.util.stream.Collectors;
public class Main { public static void main(String[] args) { List list1 = Arrays.asList(1, 2, 3, 4, 5);
        List list2 = Arrays.asList(4, 5, 6, 7, 8);
        // 将列表转换为Stream
        Stream stream1 = list1.stream();
        Stream stream2 = list2.stream();
        // 找出两个Stream的重复元素
        List commonElements = Stream.concat(stream1, stream2)
                                             .distinct()
                                             .collect(Collectors.toList());
        // 打印出重复元素
        System.out.println(commonElements);
    }
}

方法三:使用HashMap

import java.util.*;
public class Main { public static void main(String[] args) { List list1 = Arrays.asList(1, 2, 3, 4, 5);
        List list2 = Arrays.asList(4, 5, 6, 7, 8);
        // 将列表转换为HashMap
        Map map = new HashMap<>();
        list1.forEach(i -> map.put(i, map.getOrDefault(i, 0) + 1));
        list2.forEach(i -> map.put(i, map.getOrDefault(i, 0) + 1));
        // 找出HashMap中值大于1的键,即为重复元素
        List commonElements = map.entrySet().stream()
                                         .filter(x -> x.getValue() > 1)
                                         .map(Map.Entry::getKey)
                                         .collect(Collectors.toList());
        // 打印出重复元素
        System.out.println(commonElements);
    }
}

转载:https://www.cnblogs.com/shuilangyizu/p/17596239.html

转载: https://www.jb51.net/program/302722bfi.htm