本文主要是介绍Java中求集合交集、并集、差集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
如果是自定义类,需要重写equals
方法,如果使用Set集合,还需要重写hashCode
方法;如下以User为例子:
public class User{private Integer id;private String name;@Overridepublic boolean equals(Object obj) {if(obj == null) {return false;}if(!(obj instanceof User)) {return false;}User p = (User) obj;if(this == p) {return true;}if(this.id.equals(p.id)) {return true;}return false;}@Overridepublic int hashCode() {return this.id.hashCode();}
}
方法一:使用集合自带API
使用List
//List<User> aList;
//List<User> bList;//交集
aList.retainAll(bList);//差集(aList - bList)
aList.removeAll(bList);//并集,因list不能自动去重,需要手动求差集
List<User> exceptList = new ArrayList<>(bList);
exceptList.removeAll(aList);
aList.addAll(exceptList);
//或者
aList.addAll(bList);
List<User> unionList = aList.parallelStream().distinct().collect(Collectors.toList());
使用Set
Set<User> aSet;
Set<User> bSet;//交集
aSet.retainAll(bSet);//差集(aSet - bSet)
aSet.removeAll(bSet);//并集
aSet.addAll(bSet);
推荐使用HashSet
进行集合操作,HashSet
底层是封装的HashMap
,在查找元素上时间复杂度为 O(1),运算速度会快很多;
方法二:使用parallelStream()
Set<User> aSet = new HashSet<>();
Set<User> bSet = new HashSet<>();//交集
aSet = aSet.parallelStream().filter(x -> bSet.contains(x)).collect(Collectors.toSet());//差集
aSet = aSet.parallelStream().filter(x -> !bSet.contains(x)).collect(Collectors.toSet());
这篇关于Java中求集合交集、并集、差集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!