Коллекция Java. Самый быстрый способ найти, существует ли общий элемент между двумя наборами

У меня есть два набора. (из Guava HashMultimap.values ​​()). Мне нужно быстро найти, если пересечение двух множеств является непустым множеством. Мне не нужно знать об общих элементах, просто если есть общий элемент. Я думал об использовании Sets.intersection, но он o (m + n), мы можем поручиться, если найдем общий элемент без необходимости создания всего пересечения (что-то вроде set.intersection(set2).any()). (Набор данных довольно большой, и эта операция выполняется в цикле, и, следовательно, производительность имеет первостепенное значение.)

Любое предложение приветствуется. Спасибо.

Ответ 1

С обычным JDK это просто

!Collections.disjoint(set1, set2)

Это немедленно освобождается, если элемент найден вообще.

(Хотя - для того, что стоит - Sets.intersection является более ленивым, чем вы понимаете. Он возвращает представление в постоянное время, и его метод isEmpty() также закладывает сразу же после нахождения первого общего элемента, поэтому он так же эффективны.)

Ответ 2

Вы можете использовать Collection # retainAll().

Сохраняет только элементы в этой коллекции, которые содержатся в указанная коллекция (дополнительная операция). Другими словами, удаляет из этой коллекции все ее элементы, которые не содержатся в указанной коллекции.