Set은 자바의 Collection 인터페이스를 상속받는 중복을 허용하지 않는 집합.
순서를 보장하지 않으며, 오직 유일한 값만 저장할 수 있다.
Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("apple"); // 중복이므로 추가되지 않음
System.out.println(set); // 출력: [apple, banana]
| 구현 클래스 | 특징 |
|---|---|
HashSet | 가장 일반적인 Set, 내부적으로 HashMap 기반, 순서 보장 X |
LinkedHashSet | 입력한 순서를 유지, 내부적으로 LinkedList + HashMap |
TreeSet | 자동 정렬 기능 제공 (오름차순 기본), 내부적으로 이진 탐색 트리 |
| 메서드 | 설명 |
|---|---|
add(E e) | 요소 추가 |
remove(Object o) | 요소 삭제 |
contains(Object o) | 요소 포함 여부 확인 |
size() | 요소 개수 반환 |
clear() | 모든 요소 제거 |
isEmpty() | 비어있는지 여부 확인 |
iterator() | 반복자 반환 (for-each 사용 가능) |
Set은 중복을 허용하지 않기 때문에, 객체를 저장할 때는 equals()와 hashCode()를 반드시 재정의해야 한다.
정렬이 필요한 경우 TreeSet 또는 Comparator를 활용해야 한다.
순서가 중요한 경우 LinkedHashSet을 사용한다.
중복된 값을 저장하면 안 되는 경우
빠른 검색과 삭제가 필요한 경우 (HashSet)
정렬이 필요한 경우 (TreeSet)
입력 순서를 기억해야 할 경우 (LinkedHashSet)
Set은 중복 데이터를 막고, 효율적인 데이터 처리를 가능하게 해주는 유용한 자료구조다. 상황에 맞는 구현체(HashSet, TreeSet, LinkedHashSet)를 잘 선택해서 사용하면 성능과 가독성 모두 챙길 수 있다.