JAVA
[Java] Set 자료구조와 Set 인터페이스란?
kimyongjun0129
2025. 4. 14. 22:59
Set 자료구조
중복을 허용하지 않는 자료구조이다.
Set 인터페이스
- 중복을 허용하지 않는다. (같은 객체를 두 번 이상 저장할 수 없다.)
- 순서를 보장하지 않는다. (HashSet의 경우)
- null 값 저장 가능하다. (단, 하나만)
import java.util.Set;
자바 util 패키지에 포함되어 있다.
1. 객체 생성
Set<String> set = new Set<>(); // ❌ 불가능
Set<String> set = new HashSet<>(); // ✅ 가능
Set<String> set = new LinkedHashSet<>(); // ✅ 가능
Set<String> set = new TreeSet <>(); // ✅ 가능
- Java에서 제공하는 Set 인터페이스(Set<k>)는 객체를 직접 생성 ❌.
(추가 정보 확인 : https://kimyongjun0129.tistory.com/98) - 따라서 HashSet, LinkedHashSet, TreeSet 등의 구현체(클래스)를 사용해야 한다.
- 위 코드에서 처럼 작성하는 이유 :
- 코드의 유연성 증가 : 필요에 따라 다른 구현체로 쉽게 교체할 수 있다.
- 다형성(Polymorphism) 활용 : 구현체에 의지 ❌, 하나의 인터페이스로 여러 가지 구현체를 사용할 수 있다. ✅
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.TreeSet;
다른 구현체(클래스)를 사용할 때는 import를 시켜줘야 한다.
2. 주요 구현체
클래스 | 특징 |
HashSet | 가장 일반적인 Set, 해시를 이용해 저장 (순서 없다.) |
LinkedHashSet | 입력된 순서를 유지 |
TreeSet | 자동으로 정렬 (이진 트리 구조) |
3. 주요 공통 메서드들
메서드 | 설명 |
add(E e) | 요소 추가 (중복이면 false 반환) |
remove(Object o) | 요소 제거 |
contains(Object o) | 요소 포함 여부 확인 |
isEmpty() | 비어 있는지 확인 |
size() | 요소 개수 반환 |
clear() | 모든 요소 제거 |
iterator() | 반복자(Iterator) 반환, 향상된 for문에 사용 가능 |
toArray() | 배열로 변환 |
Set의 주요 메서드는 Set 인터페이스에 정의된 것들이라 모든 Set 구현체(HashSet, LinkedHashSet, TreeSet 등)에서 사용 가능 ✅
만약, 인터페이스를 통해 구현된 공통 메서드들이 아닌 각 구현체(클래스)의 기능을 사용하고 싶다면
HashSet<String> list = new HashSet<>();
다음과 같이 인터페이스가 아닌 클래스를 이용하여 변수를 선언하고 할당하면 된다.
4. 사용 예제
더보기
import java.util.Set;
import java.util.HashSet;
public class SetExample {
public static void main(String[] args) {
Set<String> fruits = new HashSet<>();
fruits.add("apple");
fruits.add("banana");
fruits.add("orange");
fruits.add("apple"); // 중복
System.out.println("Set size: " + fruits.size()); // 3
System.out.println("Contains banana? " + fruits.contains("banana"));
for (String fruit : fruits) {
System.out.println(fruit);
}
fruits.remove("banana");
System.out.println("After removal: " + fruits);
fruits.clear();
System.out.println("Is empty? " + fruits.isEmpty());
}
}