Java中两个集合的对称差

Java中两个集合的对称差,java,collections,set,Java,Collections,Set,我的应用程序中有两个TreeSets: set1 = {501,502,503,504} set2 = {502,503,504,505} 我想获得这些集合的值,以便我的输出为集合: set = {501,505} 你在找那个人。本节将对此进行讨论 Set symmetricDiff=newhashset(set1); symmetricDiff.addAll(set2); //symmetricDiff现在包含并集 Set tmp=新哈希集(set1); tmp.保留(set2); //t

我的应用程序中有两个
TreeSet
s:

set1 = {501,502,503,504}
set2 = {502,503,504,505}
我想获得这些集合的值,以便我的输出为集合:

set = {501,505}
你在找那个人。本节将对此进行讨论

Set symmetricDiff=newhashset(set1);
symmetricDiff.addAll(set2);
//symmetricDiff现在包含并集
Set tmp=新哈希集(set1);
tmp.保留(set2);
//tmp现在包含交叉点
对称性Diff.removeAll(tmp);
//并减交点等于对称差

使用retain all、remove all和addAll对现有集合进行并集

  • intersectionSet.retainal(set2)//intersectionSet是set1的副本
  • set1.addAll(set2);//进行set1和set2的并集
  • 然后删除重复设置1.删除所有(intersectionSet)
    Set s1=new HashSet();
    Set s2=新的HashSet();
    s1.添加(“a”);
    s1.添加(“b”);
    s2.添加(“b”);
    s2.添加(“c”);
    Set s3=新哈希集(s1);
    s1.移除所有(s2);
    s2.移除所有(s3);
    s1.addAll(s2);
    系统输出打印LN(s1);
    
    s1的输出:[a,c]

    您可以使用

    编辑:


    或者,如果Java-5-ness之前的版本较少,可以使用番石榴。那些寻找(非对称差分/析取)的人可以使用或。

    您可以尝试使用

    Set set1=新树集(Arrays.asList(501502504));
    Set set2=新树集(Arrays.asList(502503));
    设置对称性差异=
    对称性差异(set1,set2);
    Assert.assertEquals(
    新树集(Arrays.asList(501505)),
    对称性(差异);
    

    注意:我是Eclipse集合的提交者。

    如果我们使用com.google.common.collect包,我们可能会发现这样的对称差异:

        Set<Integer> s1 = Stream.of( 1,2,3,4,5 ).collect( Collectors.toSet());
        Set<Integer> s2 = Stream.of( 2,3,4 ).collect( Collectors.toSet());
        System.err.println(Sets.symmetricDifference( s1,s2 ));
    
    Set s1=Stream.of(1,2,3,4,5).collect(Collectors.toSet());
    Set s2=Stream.of(2,3,4).collect(Collectors.toSet());
    系统误差println(集合对称性差(s1,s2));
    
    输出将是:
    [1,5]

    +1,用于准确解释您想要得到的信息。这不是设置减法
    set1-set2
    将是
    set1
    中的所有元素,而不是
    set2
    中的所有元素,即
    {501}
    。我讨厌那些Apache commons libs在Java5之前的全部特性,但这肯定是一个可行的选择。
    Set<String> s1 = new HashSet<String>();
        Set<String> s2 = new HashSet<String>();
        s1.add("a");
        s1.add("b");
        s2.add("b");
        s2.add("c");
        Set<String> s3 = new HashSet<String>(s1);
        s1.removeAll(s2);
        s2.removeAll(s3);
        s1.addAll(s2);
        System.out.println(s1);
    
    Set<Integer> set1 = new TreeSet<>(Arrays.asList(501,502,503,504));
    Set<Integer> set2 = new TreeSet<>(Arrays.asList(502,503,504,505));
    Set<Integer> symmetricDifference =
            Sets.symmetricDifference(set1, set2);
    
    Assert.assertEquals(
            new TreeSet<>(Arrays.asList(501, 505)),
            symmetricDifference);
    
        Set<Integer> s1 = Stream.of( 1,2,3,4,5 ).collect( Collectors.toSet());
        Set<Integer> s2 = Stream.of( 2,3,4 ).collect( Collectors.toSet());
        System.err.println(Sets.symmetricDifference( s1,s2 ));