爪哇:有没有一种简单、快速的方法可以将 AND、OR 或 XOR 组合在一起?
-
23-08-2019 - |
题
也就是说,如果我有两个或更多集合,并且我想返回一个包含以下任一集合的新集合:
- 每个集合的所有元素都有共同点 (AND)。
- 每组的所有元素总计 (OR)。
- 每组的所有元素都是独一无二的。(异或)。
有没有一种简单的、预先存在的方法可以做到这一点?
编辑: 这是错误的术语,不是吗?
解决方案
假设2 设置对象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);
其他提示
您可以使用 Google-Collections Sets 类 它具有交集()、联合()和对称差异()方法。
Sets.intersection(set1, set2);
Sets.union(set1, set2);
SetView view = Sets.intersection(Sets.union(set1, set2), set3);
Set result = view.copyInto(new HashSet());
@米尔豪斯 说:
查看sets api。如果您使用addall,则可以或。如果您使用保留,则可以得到。我不知道XOR。
好像你有套装 s1
和 s2
你可以这样做来获得异或:
- 复制该集合
s1
到s3
s1.removeAll(s2);
(s1 现在包含 s2 中没有的所有元素)s2.removeAll(s3);
(s2 现在包含 s3 中没有的所有元素 = 旧的 s1)s1.addAll(s2);
(s1 现在包含上述两个集合的并集)
查看集合 应用程序编程接口. 。如果你使用 addAll 你可以得到 or 。如果您使用retainAll,您可以获得and。我不知道异或。
编辑: 来自设置文档。
...如果指定的集合也是一个集合,则 addAll 操作会有效地修改此集合,使其值是两个集合的并集。
....如果指定的集合也是一个集合,则此操作有效地修改该集合,使其值是两个集合的交集。
我很确定 Jakarta Common Collections API 支持并集、交集等。
如果 Google Collections API 没有做到这一点,我会感到惊讶。
不隶属于 StackOverflow