項目中我用到了Set的retainAll和removeAll兩個方法取差集和交集。
用法網上都有,我也不展示了。
但是因為我是急着用,直接就照着寫了,沒想到出大問題了。
因為我的set是一個map的keySet()方法返回的,然后剛好上面的那兩個方法
都是會對源數據進行操作的,比如說
Map<String, String> map;(十條數據)
Set<String> keys= map.keySet();(十條數據)
Set<String> a ;(五條數據)
執行:keys.removeAll(a);
此時map就只剩下五條數據了,這就有點坑了。
所以Set的retainAll和removeAll一定要慎用,如果不想改變源數據的話,可以用這個
(com.google.common.collect)
我們現在用的是這個集合工具,還挺方便的。
因此,用它的話,取交集差集就不用擔心影響到源數據了,因為它沒有動源數據。
差集:
difference()函數返回兩個集合的差集,即返回的在第一個集合但不在第二個集合中的元素
Sets.difference(set1, set2);
交集:
intersection()方法用於返回兩個或更多集合中都包含的元素,即交集。
Sets.intersection(set1,set2);
總結:出現這種bug是我對api不熟練的原因,所幸失敗是成功之母,這次踩坑了,以后就會記住了。