項目中我用到了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
咱們如今用的是這個集合工具,還挺方便的。io
所以,用它的話,取交集差集就不用擔憂影響到源數據了,由於它沒有動源數據。class
差集:map
difference()函數返回兩個集合的差集,即返回的在第一個集合但不在第二個集合中的元素
Sets.difference(set1, set2);
交集:
intersection()方法用於返回兩個或更多集合中都包含的元素,即交集。
Sets.intersection(set1,set2);
總結:出現這種bug是我對api不熟練的緣由,所幸失敗是成功之母,此次踩坑了,之後就會記住了。