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 тоже корректен.