집합

박서현·2022년 8월 30일
0

집합 (Set)

  • 특정 조건에 맞는 원소들의 모임
  • 집합 표현 방법에는 3가지가 있다.
    • 원소나열법
    • 조건제시법
    • 벤 다이어그램

교집합

  • 두 집합이 공통으로 포함하는 원소로 이루어진 집합
  • A에도 포함되고, B에도 포함된다.
  • A and B, AND 연산, &&

합집합

  • 어느 하나에라도 속하는 원소들을 모두 모은 집합
  • A or B, OR 연산, |

차집합

  • A(or B)에만 속하는 원소들의 집합
  • A not and B, A - B
  • A - B : A에는 속하지만, B에는 속하지 않음

여집합

  • 전체 집합(U) 중 A의 원소가 아닌 것들의 집합

예제

public class Main {
    public static void main(String[] args) {
//        자바에서 집합 사용 : HashSet
        HashSet hashSet1 = new HashSet();
        hashSet1.add(1);
        hashSet1.add(1);
        hashSet1.add(1);
        hashSet1.add(1);
        System.out.println("Set1 = " + hashSet1);
        hashSet1.add(2);
        hashSet1.add(3);
        System.out.println("Set1 = " + hashSet1);
        hashSet1.remove(1);
        System.out.println("Set1 = " + hashSet1);
        System.out.println(hashSet1.size());
        System.out.println(hashSet1.contains(2));

//        교집합 retain
        HashSet a = new HashSet(Arrays.asList(1, 2, 3, 4, 5));
        HashSet b = new HashSet(Arrays.asList(2, 4, 6, 8, 10 ));
        a.retainAll(b);
        System.out.println("교집합 : " + a);

//        합집합 addAll
        a.addAll(b);
        System.out.println("합집합 : " + a);

//        차집합 removeAll
        a.removeAll(b);
        System.out.println("차집합 : " + a );

    }
}

HashSet의 메서드를 직접 구현해보고, 테스트 코드 작성

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;

class MySet {
    ArrayList<Integer> list;

    MySet() {
        this.list = new ArrayList<Integer>();
    }

    MySet(int[] arr) {
        this.list = new ArrayList<Integer>();

        for (int item: arr) {
            this.list.add(item);
        }
    }

//    원소 추가 (중복 X)
    public void add(int x) {
        for (int item: this.list) {
            if (item == x) {
                return;
            }
        }
        this.list.add(x);
    }

//    교집합
    public  MySet retainAll(MySet b) {
        MySet result = new MySet();
        for (int itemA: this.list) {
            for (int itemB: b.list) {
                if (itemA == itemB) {
                    result.add(itemA);
                }
            }
        }
        return result;
    }

//    합집합
    public MySet addAll(MySet b) {
        MySet result = new MySet();

        for (int itemA: this.list) {
            result.add(itemA);
        }

        for (int itemB: b.list) {
            result.add(itemB);
        }
        return result;
    }

//    차집합
    public MySet removeAll(MySet b) {
        MySet result = new MySet();

        for (int itemA: this.list) {
            boolean containFlag = false;

            for (int itemB: b.list) {
                if (itemA == itemB) {
                    containFlag = true;
                    break;
                }
            }

            if (!!containFlag) {
                result.add(itemA);
            }
        }
        return result;
    }
}

public class Main {
    public static void main(String[] args) {

//        Test code
        MySet a = new MySet();
        a.add(1);
        a.add(1);
        a.add(1);
        System.out.println(a.list);
        a.add(2);
        a.add(3);
        System.out.println(a.list);

        a = new MySet(new int[]{1, 2, 3, 4, 5});
        MySet b = new MySet(new int[]{2, 4, 6, 8, 10});
        System.out.println("a :" + a.list);
        System.out.println("b :" + b.list);

        MySet result = a.retainAll(b);
        System.out.println("교집합 :" + result.list);

        result = a.addAll(b);
        System.out.println("합집합 :" + result.list);

        result = a.removeAll(b);
        System.out.println("차집합 :" + result.list);

    }
}

profile
불편함을 당연시 여기지 않고, 더 나은 프로세스를 위해, 더 나은 사용자 경험을 위해, 공부하고, 메모하고, 개발하는 박서현 입니다.

0개의 댓글