Я не понимаю поведение Sets # разницы гуавы в о IsEmpty() метод:гуава Sets.difference # IsEmpty() поведение
public static <E> SetView<E> difference(final Set<E> set1, final Set<?> set2) {
checkNotNull(set1, "set1");
checkNotNull(set2, "set2");
final Predicate<Object> notInSet2 = Predicates.not(Predicates.in(set2));
return new SetView<E>() {
@Override public Iterator<E> iterator() {
return Iterators.filter(set1.iterator(), notInSet2);
}
@Override public int size() {
return Iterators.size(iterator());
}
@Override public boolean isEmpty() {
return set2.containsAll(set1);
}
@Override public boolean contains(Object element) {
return set1.contains(element) && !set2.contains(element);
}
};
}
Точнее, я не понимаю, как set2.containsAll(set1);
может быть использован в результате isEmpty()
.
примере:
- SET1 = А, В
- SET2 = А, В, С, D, Е
разность (С, D, Е), безусловно, не быть пустым. Но Sets.difference (set1, set2) .isEmpty() вернет true как (A, B, C, D, E) .containsAll (A, B) истинно.
Даже если Javadoc говорит, что я не понимаю логику:
{@code set2} может также содержать элементы, которые не представляют в {@code set1}; они просто игнорируются
Я принимаю? Должен ли я заполнить вопрос?
(я использую гуавы-18,0)
Действительно, я ожидал, что поведение таких как 'Sets. symmetricDifference'. Спасибо за ваш ответ. – Arno