Set은 Java 컬렉션 프레임워크의 한 종류로, 중복을 허용하지 않는 데이터 구조입니다.
주요 특징:
// 집합 생성
Set<String> set1 = new HashSet<>(Arrays.asList("A", "B", "C"));
Set<String> set2 = new HashSet<>(Arrays.asList("B", "C", "D"));
// 합집합 (Union)
set1.addAll(set2); // set1에 set2의 모든 요소 추가
// 차집합 (Difference)
set1.removeAll(set2); // set1에서 set2에 있는 요소 제거
// 교집합 (Intersection)
set1.retainAll(set2); // set1에서 set2와 공통된 요소만 유지
// Set 변환 후 다시 List로 변환
List<String> list = Arrays.asList("A", "B", "C", "A", "B", "C");
Set<String> set = new HashSet<>(list);
List<String> uniqueList = new ArrayList<>(set);
List<String> list = Arrays.asList("A", "B", "C", "A", "B", "C");
List<String> uniqueList = list.stream()
.distinct()
.collect(Collectors.toList());
// 합집합
public static <T> List<T> union(List<T> list1, List<T> list2) {
List<T> union = new LinkedList<>();
union.addAll(list1);
for (T t : list2) {
if (!union.contains(t)) union.add(t);
}
return union;
}
// 차집합
public static <T> List<T> difference(List<T> list1, List<T> list2) {
List<T> difference = new LinkedList<>();
difference.addAll(list1);
for (T t : list2) {
difference.remove(t);
}
return difference;
}
// 교집합
public static <T> List<T> intersection(List<T> list1, List<T> list2) {
List<T> intersection = new LinkedList<>();
for (T t : list1) {
if (list2.contains(t)) intersection.add(t);
}
return intersection;
}