欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Set的交集、差集踩坑记录

程序员文章站 2023-01-25 17:10:05
项目中我用到了Set的retainAll和removeAll两个方法取差集和交集。 用法网上都有,我也不展示了。 但是因为我是急着用,直接就照着写了,没想到出大问题了。 因为我的set是一个map的keySet()方法返回的,然后刚好上面的那两个方法 都是会对源数据进行操作的,比如说 此时map就只 ......

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