본문 바로가기
언어/java

[java] Set-HashSet, LinkedHashSet, TreeSet

by 개발LOG 2025. 5. 2.
반응형

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