Set的交集 差集踩坑記錄

2022-11-24 17:46:37 字數 712 閱讀 5113

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

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

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

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

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

mapmap;(十條資料)
setkeys= map.keyset();(十條資料)

seta ;(五條資料)

執行:keys.removeall(a);

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

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

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

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

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

sets.difference(set1, set2);

交集:

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

sets.intersection(set1,set2);

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

list的交集,差集,並集

工作中用到了list的取差集,發現還是挺好用的。所以記錄下。需求list的方法 說明備註 交集lista.retainall listb lista內容變為lista和listb都存在的物件 listb不變 差集lista.removeall listb lista中存在的listb的內容去重 li...

C List的並集 交集 差集

集合的並集是合併集合的項,如下圖所示 listls1 new list listls2 new list ienumerableunionls ls1.union ls2 foreach int item in unionls t item 集合的交集是取集合的共同的項,如下圖所示 listls1 ...

C 求集合的交集差集

標準庫的標頭檔案中提供了std set difference,std set intersection和std set union用來求兩個集合的差集,交集和並集。正好有個需求,需要求在實體類集合a中,但是不再實體類集合b中的元素,可以使用上述方法來實現。首先,來看下上述幾個方法的簡單使用。std ...