반응형
Set은 배열을 중복제거하고 싶을 때 사용한다.
Set에 추가하려면 add하면 된다.
| 구분 | HashSet | LinkedHashSet | TreeSet |
| 중복 제거 | ✅ 가능 | ✅ 가능 | ✅ 가능 |
| 정렬 순서 유지 | ❌ 순서 없음 (무작위) | ✅ 입력한 순서 유지 | ✅ 오름차순 |
| 속도 | O(1)로 보통 더 빠름 | O(1)로 약간 느림 (순서 유지 오버헤드) | O(log N) (이진 트리 기반) |
| 사용 목적 | 순서 상관없는 중복 제거 | 중복 제거 + 입력 순서 유지 필요 시 | 정렬된 집합이 필요할 때 (예: 순위, 정렬 출력) |
중복제거 (순서필요)예시:
import java.util.*;
String[] arr = {"apple", "banana", "apple", "orange", "banana"};
Set<String> set = new LinkedHashSet<>(Arrays.asList(arr));
for (String s : set) {
System.out.println(s);
}
교집합 요소 찾는 문제(순서필요없음):
import java.util.*;
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = {3, 4, 5, 6, 7};
Set<Integer> set = new HashSet<>();
for (int num : arr1) {
set.add(num);
}
for (int num : arr2) {
if (set.contains(num)) {
System.out.print(num + " ");
}
}
교집합 내장 메서드 retainAll():
package ex;
import java.util.Arrays;
import java.util.HashSet;
public class ex01 {
// static Scanner sc = new Scanner(System.in);
public static void main(String[] args) throws Exception {
HashSet<Integer> arr1 = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));
HashSet<Integer> arr2 = new HashSet<>(Arrays.asList(3, 4, 5, 6, 7));
HashSet<Integer> result = new HashSet<>(arr1);
result.retainAll(arr2);
System.out.println(result);
}
}
합집합은 addAll(한꺼번에 추가) 메서드를 사용한다. //add는 하나씩추가
차집합은 removeAll(한꺼번에 삭제) 메서드를 사용한다. //remove는 요소 삭제
반응형
'언어 > java' 카테고리의 다른 글
| [java] 열거형 타입 enum (0) | 2025.09.06 |
|---|---|
| [java] Map-HashMap, LinkedHashMap, TreeMap (0) | 2025.05.02 |
| [java] for, for each문 (0) | 2025.05.02 |
| [java] switch/case 문 (0) | 2025.05.02 |
| [java] 이클립스 단축키 모음 (0) | 2025.05.02 |