집합 (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);
}
}