Home [Java] 집합 연산 정리 (합집합/교집합/차집합/부분집합)
Post
Cancel

[Java] 집합 연산 정리 (합집합/교집합/차집합/부분집합)

집합 연산에 대해 정리했습니다.

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
    }
}
This post is licensed under CC BY 4.0 by the author.