같은 유형의 A와 B 두 세트가 있습니다.
A에 세트 B의 요소가 있는지 찾아야합니다.
세트를 반복하지 않고 가장 좋은 방법은 무엇입니까? 설정 라이브러리가 contains(object)
하고 containsAll(collection)
있지만 containsAny(collection)
.
답변
Collections.disjoint(A, B)
작동 하지 않습니까? 설명서에서 :
지정된
true
두 컬렉션에 공통 요소가없는 경우를 반환 합니다.
따라서 false
컬렉션에 공통 요소가 포함되어 있으면 메서드가 반환 됩니다.
답변
답변
세트에 containsAny를 구현하는 좋은 방법은 Guava Sets.intersection ()을 사용하는 것 입니다.
containsAny
를 반환 boolean
하므로 호출은 다음과 같습니다.
Sets.intersection(set1, set2).isEmpty()
세트가 분리되어 있으면 true를, 그렇지 않으면 false를 반환합니다. 원래 세트를 수정하지 않기 위해 복제를 할 필요가 없기 때문에이 시간의 복잡성은 retainAll보다 약간 낫습니다.
답변
Apache Commons에는 메소드가 CollectionUtils.containsAny()
있습니다.
답변
org.apache.commons.collections.CollectionUtils를 사용합니다.
CollectionUtils.containsAny(someCollection1, someCollection2)
그게 다야! 하나 이상의 요소가 두 컬렉션에 모두 있으면 true를
반환 합니다 .
사용하기 쉽고 함수의 이름이 더 암시 적입니다.
답변
retainAll()
Set 인터페이스에서 사용하십시오 . 이 방법은 두 세트에서 공통 인 요소의 교차점을 제공합니다. 자세한 내용은 API 문서를 참조하십시오.
답변
HashMap
세트 A에서 생성 한 다음 세트 B를 반복하고 B의 요소가 A에 있는지 확인 하는 것이 좋습니다 . O(|A|+|B|)
충돌이 없을 때 시간에 retainAll(Collection<?> c)
실행되지만 O(|A|*|B|)
시간에 실행해야합니다 .