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对现有集合进行并集
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 ));