列印出兩個set中差集 Set的交集 差集踩坑記錄

2021-10-17 06:02:51 字數 714 閱讀 8758

專案中我用到了set的retainall和removeall兩個方法取差集和交集。

用法網上都有,我也不展示了。

但是因為我是急著用,直接就照著寫了,沒想到出大問題了。

因為我的set是乙個map的keyset()方法返回的,然後剛好上面的那兩個方法

都是會對源資料進行操作的,比如說

map map;(十條資料)

set keys= map.keyset();(十條資料)

set a ;(五條資料)

執行:keys.removeall(a);

此時map就只剩下五條資料了,這就有點坑了。

所以set的retainall和removeall一定要慎用,如果不想改變源資料的話,可以用這個

(com.google.common.collect)

我們現在用的是這個集合工具,還挺方便的。

因此,用它的話,取交集差集就不用擔心影響到源資料了,因為它沒有動源資料。

差集:difference()函式返回兩個集合的差集,即返回的在第乙個集合但不在第二個集合中的元素

sets.difference(set1, set2);

交集:intersection()方法用於返回兩個或更多集合中都包含的元素,即交集。

sets.intersection(set1,set2);

總結:出現這種bug是我對api不熟練的原因,所幸失敗是成功之母,這次踩坑了,以後就會記住了。

90 判斷兩個 Set 是否相同

完成issameset函式,它接受了兩個 set 物件作為引數,請你返回true false來表明這兩個 set 的內容是否完全一致,例如 const a const b 1 const c scriptoj const set1 new set a,b,c const set2 new set a...

Set在兩個集合中做找不同

工作需求,需要做檔案對賬功能。簡單點講,就是兩個集合,找出這兩個集合中不同的元素。演算法我就不自己寫了。可以用set解決這個問題。hashset不能新增重複的元素,當呼叫add object 方法時候,首先會呼叫object的hashcode方法判hashcode是否已經存在,如不存在則直接插入元素...

兩個List取差集

兩個物件list,直接比較是不行的,因為他們存的位址不一樣 需要重寫gethashcode 與equals object obj 方法告訴電腦 public class model public string name public override intgethashcode public ov...