Java:在 3 行或更少的时间内查找 2 个集合的并集、交集、差异和异或

标签 java methods set treeset

对于一个项目,我需要找到两个集合的并集、交集、差异和异或。每个方法不能超过3行代码。到目前为止,我已经有了工作方法,但我一生都看不到如何将差异和异或方法压缩到 3 行或更少的代码。这是我到目前为止所拥有的:

static TreeSet<String> union( TreeSet<String> set1, TreeSet<String> set2 )
{
    TreeSet<String> s1 = new TreeSet<String>(set1);
    s1.addAll(set2);
    return s1;
}

static TreeSet<String> inter( TreeSet<String> set1, TreeSet<String> set2 )
{
    TreeSet<String> s1 = new TreeSet<String>(set1);
     s1.retainAll(set2);
    return s1; 
}

static TreeSet<String> diff( TreeSet<String> set1, TreeSet<String> set2 )
{

    TreeSet<String> s1= new TreeSet<String>(inter(set1, set2));
    TreeSet<String> s2 = new TreeSet<String>(set1);
    s2.removeAll(s1);
    return s2; 
}

static TreeSet<String> xor( TreeSet<String> set1, TreeSet<String> set2 )
{
    TreeSet<String> s1 = new TreeSet<String>(union(set1,set2));
    TreeSet<String> s2 = new TreeSet<String>(inter(set1, set2));
    s1.removeAll(s2);
    return s1; 
}

我一直盯着这个,但就是没有想到。在此先感谢您的时间。我知道这可能是一个简单的解决方案,但我只是没有看到。

最佳答案

如果您不使用辅助变量之一,则可以每行保存一行。相反,写

s2.removeAll(new TreeSet<String>(inter(set1, set2)));

您的 diff 方法,以及

s1.removeAll(new TreeSet<String>(inter(set1, set2)));

用于您的异或方法。

编辑:

s2.removeAll(inter(set1, set2));

s1.removeAll(inter(set1, set2)));

也可以工作,因为你的 inter() 返回一个 TreeSet。

关于Java:在 3 行或更少的时间内查找 2 个集合的并集、交集、差异和异或,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23137294/

相关文章:

java - 为什么是 JFrame.EXIT_ON_CLOSE 与 EXIT_ON_CLOSE?

javascript - 如何将 jQuery/Javascript 函数转换为方法

java - 获取两组之间的差异

c++ - 设置操作不适用于自定义对象

java - 从 Java.util.Deque 中选择一个随机元素

java - 确定性地创建 .jar 文件(每次都相同)

java - Java 新手——返回单元测试失败

java - 防止重复记录和排序的集合

java - 使用布局管理器和 JFrame,NullPointerException

java - "Container"类,好还是不好的做法,为什么?