專案中我用到了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...