当前位置: 首页 > 面试题库 >

什么是最好的方式来获得在Java中的两个集合之间的对称差异?

陈实
2023-03-14
问题内容

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

我有:

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);

差异()和symmetricDifference()的
Javadocs

symmetricDifference()确实满足您的要求,但difference()通常也有帮助。

两种方法都返回实时视图,但是例如您可以调用.immutableCopy()结果集以获得不变的集。如果您不想要视图,但需要一个可修改的实例,请致电.copyInto(s3)。有关这些方法,请参见SetView。



 类似资料:
  • 我正在处理两组包含我创建的复杂java对象的数据。假设包含的元素是People.java类型的,它有一个字符串名称和一个int age。假设我有这些集: Set2=[{Arthur,18},{James,25}] 我试图得到set1和set2之间的不对称差,所以这个差的结果是{Anne,22}。我尝试过将元素存储在hashset中并使用set1。移除所有(set2),但答案等于set1。需要注意的

  • 问题内容: 我在Python中有两个列表,如下所示: 我需要用第一个列表中的项目创建第二个列表,而第二个列表中没有这些项目。从示例中,我必须得到: 有没有循环和检查的快速方法吗? 问题答案: 当心 你可能期望/希望它等于的位置。如果你想作为答案,则需要使用

  • 问题内容: 我有两个这样的结果集: 我需要的最终结果是这些数组之间的差异–最终结果应如下所示: 是否可以在JavaScript中执行类似的操作? 问题答案: 仅使用本机JS,类似的方法将起作用:

  • 我写了一个代码来检查两个列表之间的交集。我只需要有交集。有没有更快的方法。

  • 问题内容: Java类库具有一个名为DateTime的类。DateTime具有此方法: 该参数返回此参数与参数之间的天数。它没有方法 我碰巧需要的。是否有一个类似于DateTime但有这种方法的类? 问题答案: 不熟悉DateTime … 如果您有两个日期,则可以对它们调用getTime以获取毫秒,获取diff并除以1000。例如 如果您有日历对象,则可以调用 并做同样的

  • 我正在计算时间,直到当天晚上11:59。下面是一个例子。 然而,我希望它能告诉我一个时间,比如20H13M49,而不是我得到20H1255M73500 我知道这是预期的工作,但我如何才能实现我所寻求的格式?