【发布时间】:2022-02-03 07:24:51
【问题描述】:
假设我有两套:
Set<String> set1 = new HashSet<>(Arrays.asList("a", "b", "c", "d", "e") );
Set<String> set2 = new HashSet<>(Arrays.asList("b", "c", "d", "e", "f") );
在性能方面,比较两者并获得List 的差异的最简单和最好的方法是什么?
这意味着我应该得到一个包含"a" 和"f" 的列表。这里的棘手之处在于,差异可能出现在任一列表中。
我只能让它与 for 循环一起工作,但必须有更简单的方法......
【问题讨论】:
-
嗯,更简单的方法可能是使用库,例如Apache Commons Collection 的
CollectionUtils.disjunction()。但是无论如何,自己做都不应该那么困难或复杂,例如如果性能不是那么重要,请尝试创建每个集合的副本,在每个集合上调用removeAll()并传递另一个原始集合,最后组合 2,例如copyOfS1.removeAll(set2); copyOfS2.removeAll(set1); copyOfS1.addAll(copyOfS2);. -
这能回答你的问题吗? Union or intersection of Java Sets
-
@fantaghirocco 我不想做联合或交叉,我实际上是在尝试做与交叉相反的事情。交集返回两个列表中包含的所有元素,这不是我想要的。
-
@Thomas 性能至关重要,这就是问题所在。
-
好吧,你应该从一开始就这么说。你只是要求“更容易”。