求倆個集合的差集
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重復的元素 重復元素改值 作為后期區(qū)分依據(jù)
?????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? 結(jié)果? 3,1,4;
2.利用集合自身的????removeAll()/retainAll();/addAll();
????新建一個集合暫存數(shù)據(jù)
? ??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);
????????????}