I have two sets, A and B, of the same type.
I have to find if A contains any element from the set B.
What would be the best way to do that without iterating
I would recommend creating a HashMap
from set A, and then iterating through set B and checking if any element of B is in A. This would run in O(|A|+|B|)
time (as there would be no collisions), whereas retainAll(Collection<?> c)
must run in O(|A|*|B|)
time.
You can use retainAll method and get the intersection of your two sets.
Stream::anyMatch
Since Java 8 you could use Stream::anyMatch.
setA.stream().anyMatch(setB::contains)