项目中我用到了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不熟练的缘由,所幸失败是成功之母,此次踩坑了,之后就会记住了。