打印出不在两个HashSet中的元素

时间:2016-06-22 08:00:23

标签: java set hashset

我不想输入整个代码(我认为这是不必要的)。我的问题是:我有两个大字符串,我用'分开';'并添加到两个Hashsets。有了这个,我想检查两个集合的元素是否相同,如果它们不相同 - 打印出不同的元素。我不希望通过任何迭代来实现它,因为相应的元素是相同的,因此不需要遍历每个元素。

    Set latestStableRevConfigurationSet = new HashSet(Arrays.asList(latestStableRevConfiguration.split(";")));
    Set currentRevConfigurationSet = new HashSet(Arrays.asList(currentRevConfiguration.split(";")));

    assertTrue(latestStableRevConfigurationSet.containsAll(currentRevConfigurationSet));
    assertTrue(currentRevConfigurationSet.containsAll(latestStableRevConfigurationSet));

上面的方法我只能断言集合是否“相同”但是如何实现A-B / B-A以便打印出不同的元素?

3 个答案:

答案 0 :(得分:2)

试试这个:

    Set<String> latestStableRevConfigurationCopy = new HashSet<>(latestStableRevConfigurationSet); 
    Set currentRevConfigurationCopy = currentRevConfigurationSet; 

    latestStableRevConfigurationCopy.removeAll(currentRevConfigurationSet );
    currentRevConfigurationCopy.removeAll(latestStableRevConfigurationSet );

    //this would print all the different elements from both the sets.
    System.out.println(latestStableRevConfigurationCopy );
    System.out.println(currentRevConfigurationCopy );

答案 1 :(得分:1)

你可以使用番石榴:

SetView<Number> difference = com.google.common.collect.Sets.symmetricDifference(set2, set1);

如果您不想添加新的依赖性,可以稍微修改Github repo上提供的代码。

答案 2 :(得分:1)

您想要只在一个集合中的所有元素。一种方法是将所有元素与

结合起来
Set union = new HashSet();
union.addAll(latestStableRevConfigurationSet);
union.addAll(currentRevConfigurationSet);

然后取交叉点(即公共元素)

Set intersection = new HashSet();
intersection.addAll(latestStableRevConfigurationSet);
intersection.retainAll(currentRevConfigurationSet);

最后减去两个:

union.removeAll(intersection);