Как лучше всего получить симметричную разницу между двумя наборами в java?

Мне интересно, есть ли быстрый / чистый способ получить симметричную разницу между двумя наборами?

У меня:

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"]

Просто чтобы уточнить, мне нужно симметричная разность.

35
задан i_am_zero 11 September 2018 в 04:19
поделиться

1 ответ

public class Practice {
    public static void main(String[] args) {
        Set<Integer> set1 = new HashSet<Integer>();
        Set<Integer> set2 = new HashSet<Integer>();
        set1.add(1);
        set1.add(4);
        set1.add(7);
        set1.add(9);

        set2.add(2);
        set2.add(4);
        set2.add(5);
        set2.add(6);
        set2.add(7);

        symmetricSetDifference(set1, set2);
    }

    public static void symmetricSetDifference(Set<Integer>set1, Set<Integer>set2){
        //creating a new set
        Set<Integer> newSet = new HashSet<Integer>(set1);
        newSet.removeAll(set2);
        set2.removeAll(set1);
        newSet.addAll(set2);
        System.out.println(newSet);
    }

, Если a и b наборы

a - b

, все в a, это не находится в b.

>>> a = {1,2,3}
>>> b = {1,4,5}
>>> 
>>> a - b
{2, 3}
>>> b - a
{4, 5}

a.symmetric_difference(b) все элементы, которые находятся точно в одном наборе, например, объединении a - b и b - a.

>>> a.symmetric_difference(b)
{2, 3, 4, 5}
>>> (a - b).union(b - a)
{2, 3, 4, 5}
0
ответ дан 27 November 2019 в 06:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: