집합 연산에 대해 정리했습니다.
1️⃣ 집합 연산 메서드
연산 | 메서드 | 방법 | 시간복잡도 |
---|---|---|---|
합집합 (Union) | addAll() | set1.addAll(set2) | O(n+m) |
교집합 (Intersection) | retainAll() | set1.retainAll(set2) | O(min(n, m)) |
차집합 (Difference) | removeAll() | set1.removeAll(set2) | O(n) |
부분집합 (Subset) | containsAll() | set1.containsAll(set2) | O(n) |
메서드 사용 자료구조
위 메서드들은 Collection 인터페이스에서 제공하는 메서드로 List, Set 모두 사용 가능
그러나 List에서는 중복과 순서 때문에 결과가 다를 수 있음
2️⃣ 코드 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.*;
public class Main {
public static void main(String[] args) {
Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));
Set<Integer> set2 = new HashSet<>(Arrays.asList(3, 4, 5, 6, 7));
// 합집합
Set<Integer> union = new HashSet<>(set1);
union.addAll(set2); // set1 ∪ set2
System.out.println("합집합: " + union); // [1, 2, 3, 4, 5, 6, 7]
// 교집합
Set<Integer> intersection = new HashSet<>(set1);
intersection.retainAll(set2); // set1 ∩ set2
System.out.println("교집합: " + intersection); // [3, 4, 5]
// 차집합
Set<Integer> difference = new HashSet<>(set1);
difference.removeAll(set2); // set1 - set2
System.out.println("차집합: " + difference); // [1, 2]
// 부분집합
boolean isSubset = set1.containsAll(intersection); // intersection ⊆ set1
System.out.println("intersection은 set1의 부분집합인가? " + isSubset); // true
}
}