본문 바로가기
프로그래밍 언어/JAVA

JAVA - 컬렉션 Set

by DGDD(Developer) 2024. 6. 24.

자바의 Set 인터페이스는 순서가 없고 중복을 허용하지 않는 요소의 컬렉션을 정의합니다. Set 인터페이스를 구현하는 클래스들은 요소의 유일성을 보장하며, 특정 구현에 따라 요소의 순서를 유지하거나 정렬할 수 있습니다. 이번 포스트에서는 HashSet, LinkedHashSet, TreeSet의 작동 방식, 장단점 및 예시를 통해 자세히 살펴보겠습니다.

1. HashSet

설명:

  • HashSet은 해시 테이블을 사용하여 요소를 저장합니다. 해시 함수에 의해 요소가 저장될 위치가 결정됩니다.

장점:

  • 빠른 접근 및 검색 속도: 해시 테이블을 사용하여 빠른 검색, 삽입, 삭제가 가능합니다.
  • 중복 요소 허용 안 함: 요소의 유일성을 보장합니다.

단점:

  • 순서 보장 안 함: 요소의 저장 순서를 보장하지 않습니다.

특징:

  • 요소의 저장 순서가 유지되지 않습니다.
  • 중복된 요소를 허용하지 않습니다.

예시:

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

public class HashSetExample {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("apple");
        set.add("banana");
        set.add("cherry");
        set.add("apple"); // 중복 요소 추가 시도

        System.out.println("HashSet: " + set); // 중복 요소는 저장되지 않음
    }
}

 

2. LinkedHashSet

설명:

  • LinkedHashSet은 해시 테이블과 이중 연결 리스트를 사용하여 요소를 저장합니다. 해시 테이블을 통해 빠른 접근을 제공하며, 이중 연결 리스트를 통해 삽입 순서를 유지합니다.

장점:

  • 삽입 순서 유지: 요소가 삽입된 순서를 유지합니다.
  • 빠른 접근 및 검색 속도: 해시 테이블을 사용하여 빠른 검색, 삽입, 삭제가 가능합니다.

단점:

  • 추가 메모리 사용: 연결 리스트를 유지하기 위해 추가 메모리가 필요합니다.

특징:

  • 요소의 삽입 순서를 유지합니다.
  • 중복된 요소를 허용하지 않습니다.

예시:

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

public class HashSetExample {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("apple");
        set.add("banana");
        set.add("cherry");
        set.add("apple"); // 중복 요소 추가 시도

        System.out.println("HashSet: " + set); // 중복 요소는 저장되지 않음
    }
}

 

3. TreeSet

설명:

  • TreeSet은 이진 검색 트리인 레드-블랙 트리를 사용하여 요소를 저장합니다. 요소는 정렬된 순서로 저장됩니다.

장점:

  • 요소 정렬: 요소가 자연 순서나 제공된 비교자에 따라 정렬됩니다.
  • 범위 검색 가능: 부분 집합, 범위 검색 등의 작업이 용이합니다.

단점:

  • 느린 접근 속도: 해시 테이블을 사용하는 HashSet보다 검색, 삽입, 삭제가 느립니다.

특징:

  • 요소가 정렬된 순서로 저장됩니다.
  • 중복된 요소를 허용하지 않습니다.

예시:

import java.util.Set;
import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        Set<String> set = new TreeSet<>();
        set.add("apple");
        set.add("banana");
        set.add("cherry");
        set.add("apple"); // 중복 요소 추가 시도

        System.out.println("TreeSet: " + set); // 정렬된 순서로 저장됨
    }
}

 

자바의 Set 인터페이스를 구현하는 클래스들은 각각 고유한 장점과 단점을 가지고 있습니다. HashSet은 빠른 접근 속도를 제공하지만 순서를 보장하지 않으며, LinkedHashSet은 삽입 순서를 유지하면서 빠른 접근 속도를 제공합니다. TreeSet은 요소를 정렬된 순서로 저장하지만, 접근 속도가 상대적으로 느립니다. 각 클래스의 특성을 잘 이해하고, 적절한 상황에서 사용하여 효율적인 프로그래밍을 하시길 바랍니다.

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

JAVA - 컬렉션 List  (0) 2024.06.21
JAVA - 컬렉션 종류  (0) 2024.06.21
JAVA - 배열(Array) 와 컬렉션 (Collection)의 차이점  (0) 2024.06.21
JAVA - I/O 와 NIO 차이  (0) 2024.06.21
JAVA - 배열 복사하기  (2) 2024.03.15