求俩个集合的差集
1):应用场景
集合 list1 中有元素 1,2,4;
集合 list2 中有元素 2,3;
期望 得到一个新集合 list3 元素有 1,3,4;
2):代码
List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(4);
List<Integer> list2 = new ArrayList<>();
list2.add(3);
list2.add(2);
List<Integer> list3 = new ArrayList<>();
1.利用 HashMap 键 唯一的 特性 键是先入为主的键 值是后来居上的值
Map<Integer, Integer> map = new HashMap<Integer,Integer>();
for (Integer i : list1) {
将集合一中的元素作为map的键存入
map.put(i, 1);
}
for (Integer i : list2) {
判断 集合2中是否有与集合1重复的元素 重复元素改值 作为后期区分依据
if(map.get(i)!=null) {
map.put(i, 2);
continue;
}
集合2中没有重复的元素加入集合3
list3.add(i);
}
遍历集合
for(Map.Entry<Integer, Integer> entry:map.entrySet()) {
值为1的 对应的键就是 集合1中 没有与集合2重复的元素
if(entry.getValue()==1) {
加入集合3
list3.add(entry.getKey());
}
}
打印集合3 结果 3,1,4;
2.利用集合自身的 removeAll()/retainAll();/addAll();
新建一个集合暂存数据
List<Integer> temp = new ArrayList<>();
temp.addAll(list1);
求两个集合的并集
list1.addAll(list2);
求两个集合的交集
list2.retainAll(temp);
并集与交集的差集
list1.removeAll(list2);
for (Integer integer : list1) {
System.out.println(integer);
}