问题描述:
有一个大表集合 A 和一个小表集合 B,需要找出这两个集合之间的差集,即在 A 中存在但在 B 中不存在的集合。
解决思路:
- 将小表集合 B 转成一个 HashSet;
- 遍历大表全量数据,判断元素在 HashSet 中是否存在,如果不存在,就放到一个临时 List 中;
- 最后将临时 List 返回。
算法实现:
package com.test;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class ExceptList {
private static List<String> getExceptList(List<String> allList, List<String> partList) {
if (allList != null && partList != null && !partList.isEmpty()) {
HashSet<String> partSet = new HashSet<>(partList);
List<String> exceptList = new ArrayList<>();
for (String str : allList) {
if (!partSet.contains(str)) {
exceptList.add(str);
}
}
return exceptList;
} else {
return allList;
}
}
public static void main(String[] args) {
List<String> allList = new ArrayList<>();
allList.add("aaa");
allList.add("bbb");
allList.add("ccc");
allList.add("ddd");
List<String> partList = new ArrayList<>();
partList.add("bbb");
partList.add("ccc");
partList.add("eee");
List<String> exceptList = getExceptList(allList, partList);
System.out.println(exceptList);
}
}