[Java] 자바 ArrayList, List의 교집합, 부분집합, 차집합, 합집합 구하는 방법 총정리
자바 ArrayList의 교집합과 합집합 그리고 부분집합 및 차집합을 쉽게 구하는 방법을 알아봅니다. 날코딩으로 삽질 및 시간 낭비하지마세요. 자바 리스트 클래스에서 지원하는 메서드를 사용하세요. 언어 스킬UP 및 알고리즘 공부를 하시는 분들이라면 그렇게 동일한 기능을 하는 메서드를 구현하는 것을 추천드립니다.
1.리스트의 교집합
List클래스의 retainAll()메서드를 사용하여 두 개의 리스트에서 교집합을 구할 수 있습니다.
package edu.sample;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayListDeup {
public static void main(String[] args) {
List<String> arrayList = new ArrayList<String>();
arrayList.add("C");
arrayList.add("A");
arrayList.add("B");
List<String> arrayList2 = new ArrayList<String>();
arrayList2.add("E");
arrayList2.add("A");
arrayList2.add("B");
arrayList2.add("D");
arrayList2.add("E");
arrayList2.add("F");
//교집합
arrayList.retainAll(arrayList2);
System.out.println("교집합 : "+ arrayList.toString() );
}
}
[코드 실행결과]
교집합 : [A, B]
2.리스트의 부분집합
List클래스의 containsAll()메서드를 사용하여 부분집합을 구할 수 있습니다. 첫번째 arrayList2는 arrayList의 부분집합인가?에 대한 결과로 false 값을 얻었습니다. 두번째 arrayList3는 arrayList2의 부분집합인가?에 대한 결과를 true값을 리턴 받습니다.
package edu.sample;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayListDeup {
public static void main(String[] args) {
List<String> arrayList = new ArrayList<String>();
arrayList.add("C");
arrayList.add("A");
arrayList.add("B");
List<String> arrayList2 = new ArrayList<String>();
arrayList2.add("E");
arrayList2.add("A");
arrayList2.add("B");
arrayList2.add("D");
arrayList2.add("E");
arrayList2.add("F");
List<String> arrayList3 = new ArrayList<String>(Arrays.asList("B", "D", "F"));
//부분집합
boolean isVal = arrayList.containsAll(arrayList2);
boolean isVal2 = arrayList2.containsAll(arrayList3);
System.out.println("isVal: "+ isVal);
System.out.println("isVal2: "+ isVal2);
}
}
[코드 실행결과]
isVal: false
isVal2: true
3.리스트의 차집합
List클래스의 removeAll()메서드를 사용하여 두 어레이리스트에서 차잡합을 구합니다. arrayList에서 arrayList2와 같은 리스트의 값을 모두 제거하며 C만 남게 됩니다.
package edu.sample;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayListDeup {
public static void main(String[] args) {
List<String> arrayList = new ArrayList<String>();
arrayList.add("C");
arrayList.add("A");
arrayList.add("B");
List<String> arrayList2 = new ArrayList<String>();
arrayList2.add("E");
arrayList2.add("A");
arrayList2.add("B");
arrayList2.add("D");
arrayList2.add("E");
arrayList2.add("F");
//차집합
arrayList.removeAll(arrayList2);
System.out.println("차집합 : "+ arrayList.toString() );
}
}
[코드 실행결과]
차집합 : [C]
4.리스트의 합집합
List클래스의 addAll()메서드를 사용하여 arrayList 간 합집합을 구할 수 있습니다. addAll()메서드는 두 리스트의 중복값을 제거해 주지 않습니다. 중복을 제거하려면 HashSet를 사용하면 중복값을 허용하지 않음으로 제거됩니다.
package edu.sample;
import java.util.ArrayList;
import java.util.List;
public class ArrayListDeup {
public static void main(String[] args) {
List<String> arrayList = new ArrayList<String>();
arrayList.add("C");
arrayList.add("A");
arrayList.add("B");
List<String> arrayList2 = new ArrayList<String>();
arrayList2.add("E");
arrayList2.add("A");
arrayList2.add("B");
arrayList2.add("D");
arrayList2.add("E");
arrayList2.add("F");
//합집합
arrayList.addAll(arrayList2);
System.out.println("합집합 : "+ arrayList.toString() );
}
}
[코드 실행결과]
합집합 : [C, A, B, E, A, B, D, E, F]
합집합의 중복요소 제거를 위해 HashSet를 사용
package edu.sample;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
public class ArrayListDeup {
public static void main(String[] args) {
List<String> arrayList = new ArrayList<String>();
arrayList.add("C");
arrayList.add("A");
arrayList.add("B");
List<String> arrayList2 = new ArrayList<String>();
arrayList2.add("E");
arrayList2.add("A");
arrayList2.add("B");
arrayList2.add("D");
arrayList2.add("E");
arrayList2.add("F");
//합집합
arrayList.addAll(arrayList2);
//System.out.println("합집합 : "+ arrayList.toString() );
//arrayList 중복제거
HashSet<String> hash1 = new HashSet<String>();
hash1.addAll(arrayList);
//HashSet 출력
Iterator iterator = hash1.iterator();
while(iterator.hasNext()) {
System.out.println( iterator.next() );
}
}
}
[코드 실행결과]
A
B
C
D
E
F
[관련글 더 보기]
[Java] 자바 ArrayList 중복 값 제거하기 (HashSet, Stream, TreeSet)
[Java] 자바 ArrayList, List 두 리스트 값 비교 방법 총 정리