프로그래밍 공부

자바 컬렉션 - Set 인터페이스 본문

Programming/JAVA

자바 컬렉션 - Set 인터페이스

khj1999 2024. 10. 8. 08:25

Set 인터페이스

소개

  • Java의 Set 인터페이스는 중복된 요소를 허용하지 않는 컬렉션을 정의하는 인터페이스임.
  • Set은 Java Collections Framework의 일부로, 집합을 표현하는 데 사용된다.

주요 특징

  1. 중복 요소 없음: Set은 동일한 요소를 두 번 저장할 수 없음. 따라서 중복된 값을 자동으로 제거함.
  2. 순서 없음: Set 인터페이스를 구현한 클래스는 요소의 순서를 보장하지 않음.
    따라서 요소가 저장된 순서와 상관없이 요소를 가져올 수 있음.
  3. null 값 허용: Set은 null 값을 허용함. 단, 한 개의 null 값만 저장할 수 있음.

주요 구현 클래스

Set 인터페이스를 구현하는 주요 클래스는 다음과 같다:

  1. HashSet:

    • 해시 테이블을 기반으로 구현됨.

    • 빠른 검색 성능을 제공 (평균 O(1) 시간 복잡도).

    • 요소의 순서를 보장하지 않음.

    • null 요소를 허용.

      Set<String> hashSet = new HashSet<>();
      hashSet.add("Apple");
      hashSet.add("Banana");
      hashSet.add("Apple"); // 중복 요소는 추가되지 않음
  2. LinkedHashSet:

    • HashSet의 기능을 확장하여 요소의 삽입 순서를 유지함.

    • 순서가 중요한 경우 사용.

      Set<String> linkedHashSet = new LinkedHashSet<>();
      linkedHashSet.add("Apple");
      linkedHashSet.add("Banana");
      linkedHashSet.add("Cherry"); // 삽입 순서 유지
  3. TreeSet:

    • 이진 검색 트리를 기반으로 구현.

    • 요소가 정렬된 상태로 유지됨(자연 순서 또는 지정된 Comparator에 따라).

    • 중복 요소는 허용되지 않음.

      Set<Integer> treeSet = new TreeSet<>();
      treeSet.add(3);
      treeSet.add(1);
      treeSet.add(2); // 요소가 정렬됨
      // 출력: 1, 2, 3

주요 메서드

  • add(E e): 요소를 추가합니다. 요소가 이미 존재하면 false를 반환.
  • remove(Object o): 지정된 요소를 제거.
  • contains(Object o): 지정된 요소가 Set에 존재하는지 확인.
  • size(): Set의 크기를 반환.
  • isEmpty(): Set이 비어 있는지 확인.
  • iterator(): Set의 요소를 순회할 수 있는 반복자를 반환.

사용 예시

import java.util.HashSet;
import java.util.Set;

public class SetExample {
    public static void main(String[] args) {
        Set<String> fruits = new HashSet<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");
        fruits.add("Apple"); // 중복 추가

        System.out.println(fruits); // [Banana, Cherry, Apple] (순서는 보장되지 않음)
    }
}

요약

  • 이와 같이 Set 인터페이스는 중복을 허용하지 않고
    다양한 구현체를 통해 상황에 맞게 사용할 수 있는 유용한 컬렉션임.
  • HashSet은 삽입 순서, 정렬 순서에 관계 없음
  • LinkedHashSet은 삽입 순서대로 데이터가 저장
  • TreeSet은 데이터가 정렬된 채로 저장됨
Comments