java - 在java中获得两组之间对称差异的最佳方法是什么?

标签 java collections set

我想知道是否有一种快速/干净的方法来获得两组之间的对称差异?

我有:

Set<String> s1 = new HashSet<String>();
s1.add("a");
s1.add("b");
s1.add("c");

Set<String> s2 = new HashSet<String>();
s2.add("b");

我需要类似的东西:

Set<String> diff = Something.diff(s1, s2);
// diff would contain ["a", "c"]

只是为了澄清我需要对称差异。

最佳答案

您可以使用 Google Guava 中的一些功能图书馆(真的很棒,我强烈推荐!):

Sets.difference(s1, s2);
Sets.symmetricDifference(s1, s2);

Javadocs 用于 difference()symmetricDifference()

symmetricDifference() 完全符合 what you are asking for ,但 difference() 通常也很有帮助。

这两种方法都返回实时 View ,但您可以例如在结果集上调用 .immutableCopy() 以获得不变集。如果您不想要 View ,但需要一个可以修改的集合实例,请调用 .copyInto(s3)。见 SetView对于这些方法。

关于java - 在java中获得两组之间对称差异的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8064570/

相关文章:

c++ - 在以下情况下,集合插入如何工作?

java - 什么时候使用@Transactional 的propagation=Propagation.REQUIRES_NEW?

java - 构建多个 servlet 请求 url 模式

java - 具有任意值和长度的 CRC 计算

java - 从 map 中检索

python - 附加到集合的对象是 `NoneType` python 2.7

php - 外键与 SET 数据类型 MySQL

java - setLastModified - Java

Java Swing : List Models and Collections

java - 我可以在迭代 HashTable 时更改其对象的内部结构吗?