반응형
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] Map-HashMap, LinkedHashMap, TreeMap (0) | 2025.05.02 |
---|---|
[java] switch/case 문 (0) | 2025.05.02 |
[java] 이클립스 단축키 모음 (0) | 2025.05.02 |
[java] 삼항연산자 (0) | 2025.04.09 |
[java] JVM 동작 방식 및 메모리 구조 (0) | 2024.12.23 |