Set的交集、差集踩坑記錄

項目中我用到了Set的retainAll和removeAll兩個方法取差集和交集。api

用法網上都有,我也不展現了。函數

可是由於我是急着用,直接就照着寫了,沒想到出大問題了。工具

由於個人set是一個map的keySet()方法返回的,而後恰好上面的那兩個方法google

都是會對源數據進行操做的,好比說spa

Map<String, String> map;(十條數據)
Set<String> keys= map.keySet();(十條數據)
Set<String> a ;(五條數據)
執行:keys.removeAll(a);

此時map就只剩下五條數據了,這就有點坑了。rem

因此Set的retainAll和removeAll必定要慎用,若是不想改變源數據的話,能夠用這個it

(com.google.common.collect)

咱們如今用的是這個集合工具,還挺方便的。io

所以,用它的話,取交集差集就不用擔憂影響到源數據了,由於它沒有動源數據。class

差集map

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

Sets.difference(set1, set2);

交集:

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

Sets.intersection(set1,set2);

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

相關文章
相關標籤/搜索