Gymterview
middle

Реализуйте симметрическую разность двух коллекций используя методы Collection

Симметрическая разность — это множество элементов, принадлежащих ровно одной из двух коллекций (но не обеим одновременно). Формула: (A ∪ B) \ (A ∩ B).

Пример
<T> Collection<T> symmetricDifference(Collection<T> a, Collection<T> b) {
    // Объединение: A ∪ B
    Collection<T> union = new ArrayList<>(a);
    union.addAll(b);

    // Пересечение: A ∩ B
    Collection<T> intersection = new ArrayList<>(a);
    intersection.retainAll(b);

    // Симметрическая разность: (A ∪ B) \ (A ∩ B)
    union.removeAll(intersection);
    return union;
}

Альтернативный подход — через два вычитания:

Пример
<T> Collection<T> symmetricDifference(Collection<T> a, Collection<T> b) {
    Collection<T> aMinusB = new ArrayList<>(a);
    aMinusB.removeAll(b); // Элементы только в A

    Collection<T> bMinusA = new ArrayList<>(b);
    bMinusA.removeAll(a); // Элементы только в B

    aMinusB.addAll(bMinusA);
    return aMinusB;
}

На собеседовании: покажите, что знаете определение симметрической разности, и реализуйте через addAll + retainAll + removeAll. Альтернативный способ через два removeAll тоже корректен.