即,如果我有两个或更多集合,并且想要返回一个新的集合,其中包含以下内容:
- 每个集合共有的所有元素(AND)。
- 每个集合的所有元素(OR)的总和。
- 每个集合独有的元素(XOR)。
有没有一种简单的、现成的方法可以做到这一点?
编辑: 那术语不对,是吗?
即,如果我有两个或更多集合,并且想要返回一个新的集合,其中包含以下内容:
有没有一种简单的、现成的方法可以做到这一点?
编辑: 那术语不对,是吗?
假设有两个Set对象a和b
AND(两个集合的交集)
a.retainAll(b);
OR(两个集合的并集)
a.addAll(b);
XOR 要么自己编写循环:
foreach item
if(a.contains(item) and !b.contains(item) || (!a.contains(item) and b.contains(item)))
c.add(item)
或者这样做:
c.addAll(a);
c.addAll(b);
a.retainAll(b); //a now has the intersection of a and b
c.removeAll(a);
if (a 中的元素不在 b 中) 或者 (b 中的元素不在 a 中)
。 - Miha_x64Sets.intersection(set1, set2);
Sets.union(set1, set2);
SetView view = Sets.intersection(Sets.union(set1, set2), set3);
Set result = view.copyInto(new HashSet());
@Milhous 说:
查看集合API。如果使用addAll,可以得到或操作。如果使用retainAll,可以得到交操作。我不知道Xor。
假设你有集合 s1
和 s2
,你可以按照以下步骤获取XOR:
s1
复制到 s3
中s1.removeAll(s2);
(现在的s1包含了所有不在s2中的元素)s2.removeAll(s3);
(现在的s2包含了所有不在s3(旧的s1)中的元素)s1.addAll(s2);
(现在的s1包含了上述两个集合的并集)查看集合 api。如果使用addAll,您可以获得或。如果使用retainAll,您可以获取并且。我不知道Xor是什么。
编辑:来自集合文档。
...如果指定的集合也是一个集合,则addAll操作有效地修改该集合,使其值为两个集合的并集。
...如果指定的集合也是一个集合,则此操作有效地修改此集合,使其值为两个集合的交集。
我非常确定Jakarta Common Collections API支持并集、交集等操作。
如果Google Collections API不支持这些操作,我会感到惊讶的。