<기본 사용 코드>
// 1. 자바에서 집합 사용 - HashSet
System.out.println("== HashSet ==");
HashSet set1 = new HashSet();
set1.add(1);
set1.add(1);
set1.add(1);
System.out.println("set1 = " + set1);
set1.add(2);
set1.add(3);
System.out.println("set1 = " + set1);
set1.remove(1);
System.out.println("set1 = " + set1);
System.out.println(set1.size());
System.out.println(set1.contains(2));
// 2. 집합 연산
System.out.println("== 집합 연산 ==");
HashSet a = new HashSet<>(Arrays.asList(1,2,3,4,5));
HashSet b = new HashSet<>(Arrays.asList(2,4,6,8,10));
// 2-1. 교집합
a.retainAll(b);
System.out.println("a = " + a);
// 2-2. 합집합
a.addAll(b);
System.out.println("a = " + a);
// 2-3. 차집합
a.removeAll(b);
System.out.println("a = " + a);
<집합을 이용한 연습문제>
class MySet {
// ArrayList
ArrayList<Integer> list;
// 생성자1
MySet() {
this.list = new ArrayList<>();
}
// 생성자 2
MySet(int[] arr) {
this.list = new ArrayList<>();
for (int item :
arr) {
this.list.add(item);
}
}
// 원소 추가 (중복 X)
public void add(int x) {
for (int item :
this.list) { //리스트에 있는 원소들을 순회 하면서, add 하려는 데이터와 레스트에 있는 데이터 비교
if (item == x) {
return; // 같은게 있다면 데이터 추가 안할 것
}
}
this.list.add(x); // 그렇지 않으면 추가
}
// 교집합
public MySet retainAll(MySet b) { //a로 된 내용은 그대로 두고, 교집합된 집합을 새로 생성된 집합 생성
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 c) {
MySet result = new MySet();
for (int itemA :
this.list) {
result.add(itemA);
}
for (int itemB :
c.list) {
result.add(itemB);
}
// 중복을 추가 하지 않고 add
return result;
}
// 차집합
public MySet removeAll(MySet d) {
MySet result = new MySet();
for (int itemA :
this.list) {
boolean containFlag = false; // 같은 값이 없다는 의미
for (int itemB :
d.list) {
if (itemA == itemB) {
containFlag = true;
break;
}
//현재 집합의 리스트를 순회 하면서, 차집합에 대상 리스트를 순회
//같은 원소가 있으면 마이나스
//원소 있는지 없는지 (containFlag = T,F)
}
if (!containFlag) {
result.add(itemA);
}
}
return result;
}
}