**
取差集
**
方法一:使用循环嵌套遍历比较
一种常见的方法是通过嵌套循环遍历比较两个List对象中的元素。具体步骤如下:
遍历第一个List,对于每个元素,都在第二个List中进行遍历比较。 如果第二个List中没有找到相同的元素,则将该元素加入到差集List中。 返回差集List。
Listlist1 = 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方法,可以轻松地实现取差集的功能。
Listlist1 = 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类,其中包含了许多方便的集合操作方法。
Listlist1 = 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 staticList 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) { Listlist1 = 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) { Listlist1 = 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