public class Set {//전체 집합private int[] totalSet = {1,2,3,4,5,6,7,8,9,10};//입력받을 집합private int[] aSet;//생성자. 인자로 받은 집합을 aSet맴버변수에 세팅public Set(int[] aSet) {this.aSet = aSet;}//합집합//과정 :// 1) 새로운 집합 resultSet에 우선 aSet집합을 모두 담는다.// 2) 그 다음 aSet과 bSet의 원소들을 비교하여 aSet에 없는 bSet의 원소들을 추가한다.public Set union(Set bSet) {//현재 객체 맴버변수 aSet의 길이를 카운트로 지정.//이유는 resultSet집합에 처음에 aSet으로 세팅할꺼니깐!int count = aSet.length;//합집합 결과를 담을 집합 선언. 길이는 충분하게 aSet과 bSet의 길이의 합으로 지정//참고로 합집합 시에는 aSet, bSet에 같은 값이 있으면 하나만 표시.int[] resultSet = new int[aSet.length + bSet.length()];//resultSet에 aSet값 모두 세팅.for(int i = 0; i < aSet.length; i++) {resultSet[i] = aSet[i];}//이제부터 bSet과 aSet의 원소들을 비교하여 aSet에 없는것만 resultSet에 담음for(int i = 0; i < bSet.length(); i++) {boolean isSame = false;for(int j = 0; j < aSet.length; j++) {if(bSet.get(i) == aSet[j]) {isSame = true;break;}}//내부 for문을 돌면서 bSet[i]와 같은게 aSet에 하나도 없다면!! aSet엔 없고 bSet에 있는, 즉, 합집합에 추가해야할 원소이다.if(!isSame) {resultSet[count++] = bSet.get(i);}}return sort(removeZero(new Set(resultSet)));}//교집합//과정 :// 1) aSet 집합과 bSet집합 원소들을 검사하여 두 집합 모두에게 있는 원소를 새로운 집합에 추가한다.public Set overlap(Set bSet) {//결과를 담을 새로운 집합int[] resultSet = new int[aSet.length + bSet.length()];//결과 집합의 인덱스를 담당할 변수int count = 0;//2중 for문을 통해 bSet 원소 하나 하나씩 뽑아서 각 하나당 aSet 원소 모두를 비교해본다.//이 때 두 집합에 같은 원소가 있다면 결과를 담을 집합에 그 원소를 추가해준다.for(int i = 0; i < bSet.length(); i++) {for(int j = 0; j < aSet.length; j++) {if(bSet.get(i) == aSet[j]) {resultSet[count++] = aSet[j];}}}return sort(removeZero(new Set(resultSet)));}//여집합//과정 :// 1) 전체집합 - 현재집합.public Set compSet() {//전체 집합 생성Set totSet = new Set(totalSet);//전체 집합 차집합 aSet집합 하여 리턴return totSet.diffSet(new Set(aSet));}//차집합public Set diffSet(Set bSet) {//차집합 = A집합 - 교집합. 따라서 우선 교집합 구함.Set overSet = overlap(bSet);//결과를 담을 집합. 위에 명시한 것 처럼 A집합에서 교집합을 뺄 것이기 때문에 우선 결과집합에 A집합을 담는다.//**aSet을 직접 이용하지 않고 resultSet을 따로 쓴 이유!! -> aSet은 맴버변수이기 때문에// 변경하면 추후 모든 연산에 변경후의 값이 적용된다.// 즉, 처음엔 {1,2} 였던것이 이번 연산을 통해 {3,4}로 바뀌었다면 이 후 다른 연산을 할 경우// {3,4}를 가지고 연산을 한다. 주의!!int[] resultSet = aSet;//과정 :// 1) A집합을 담은 결과집합과 교집합을 비교한다.// 2) 비교하여 같은 것을 모두 0으로 만들어 버린다.// 3) 리턴할 때에 0인건 모두 없애 버리므로 0으로 만든거다.// ex - A집합 : {1,2,3,4} 교집합 : {2,3}// 연산 후 : {1,0,0,4} removeZero를 거치면 {1,4}for(int i = 0; i < resultSet.length; i++) {for(int j = 0; j < overSet.length(); j++) {if(resultSet[i] == overSet.get(j)) {resultSet[i] = 0;break;}}}return sort(removeZero(new Set(resultSet)));}//부분집합 검사public boolean isSubset(Set bSet) {//검사방법 : B가 A의 부분집합인지 알 수 있는 방법은 B 차집합 A를 했을때 B의 원소가 하나도 없으면 B는 A의 부분집합이다.// ex - A - {1,2,3,4} B - {2,3}// 부분집합 여부 : B - A 후에 B의 개수가 0이면 부분집합.// B - A는 {2,3} - {1,2,3,4} 이므로 B - A = {}이 된다. 따라서 true.Set orgSet = new Set(aSet);Set resultSet = bSet.diffSet(orgSet);if(resultSet.length() == 0) {return true;} else {return false;}}//자연수가 집합의 원소인지 검사public boolean isElement(int a) {//for문을 돌면서 집합 원소에 인자로 받은 int a와 같은게 있는지 검사. 있으면 true 없으면 falsefor(int i = 0; i < aSet.length; i++) {if(aSet[i] == a) {return true;}}return false;}//정렬//집합을 오름차순으로 정렬해주는 메서드public Set sort(Set bSet) {int temp;for(int i = 0; i < bSet.length(); i++) {for(int j = 0; j < bSet.length(); j++) {if(i < j && bSet.get(i) > bSet.get(j)) {temp = bSet.get(j);bSet.set(j,bSet.get(i));bSet.set(i,temp);}}}return bSet;}//0인 원소들 없앰//원소들 중에 0인 것들을 없애준다.//전체집합이 1~10이니 0을 없애주어도 무관public Set removeZero(Set bSet) {int[] resultSet = null;int count = 0;for(int i = 0; i < bSet.length(); i++) {if(bSet.get(i) != 0) {count++;}}resultSet = new int[count];count = 0;for(int i = 0; i < bSet.length(); i++) {if(bSet.get(i) != 0) {resultSet[count] = bSet.get(i);count++;}}return new Set(resultSet);}//집합의 길이 반환. length(), get(), set() 메서드는 추후 객체를 생성하면 int[]가 아닌 Set객체를 이용해야 하기 때문에//따로 만든 것이다.public int length() {return aSet.length;}// 특정 인덱스의 원소를 반환public int get(int index) {return aSet[index];}//특정 인덱스에 인자로 받은 값을 세팅public void set(int index, int value) {aSet[index] = value;}//집합 출력public void printSet() {System.out.print("{ ");for(int i = 0; i < aSet.length; i++) {System.out.print(aSet[i]);if(i != aSet.length -1) {System.out.print(", ");}}System.out.println(" }");}public static void main(String[] args) {Set aSet = new Set(new int[]{2,4,5,8});Set bSet = new Set(new int[]{1,3,2,6,7,4});