Set

중복을 허용하지 않는 데이터 셋

특징

  • 고유한 원소들을 저장하는 자료구조

  • 수학의 집합 개념과 유사하다.

  • 중복된 값을 저장할 수 없다.

  • 일반적으로 저장되는 순서를 유지할 수 없다. 따라서 리스트와 달리 index 기반 탐색이 불가능하다.

  • 두 가지 구현 방식이 있다.

    • Hash-Based Set

      • 해시 테이블로 표현되는 Set이다.

      • 각 원소를 해싱하여 얻은 인덱스 위치에 원소가 저장된다.

      • 다음 그림처럼 여러 원소(Key)들을 Hash Table에 저장하는 방식이다.

    • Tree-Based Set

      • 자가 균형 이진 탐색 트리로 표현되는 Set이다.

      • 일반적으로 red-black tree를 사용한다.

      • 각 원소는 트리의 노드에 저장된다.

HashSet

  • 해시 테이블을 두고, 원소를 해싱하여 만든 인덱스에 저장하는 방식

  • 단순히 원소를 해싱하여 해당 위치로 이동하면 되기 때문에 탐색, 추가, 제거 작업은 O(1)이 소요된다.

  • 자바의 HashSet은 아래와 같이 HashMap을 이용하여 구현되어 있다.

  • HashMap의 Key에는 Set의 요소들을 가지며, Value에는 Dummy Object(쓸모없는 임시 값)을 가진다.

TreeSet

  • 자가 균형 이진 트리(self balancing binary search tree)를 사용하기 때문에 데이터의 추가 및 삭제, 탐색 작업에 O(log(N))이 소요된다.

  • 자바의 TreeSet은 레드 블랙 트리를 사용해 구현된 TreeMap을 이용해 구현되어 있다.

  • 정렬이 가능하여 최소/최대값을 찾거나 특정 값을 기준으로 크거나 작은 값들을 빠르게 찾을 수 있다.

LinkedHashSet

  • HashSet을 상속받았으며, doubly-linked list를 기반으로 하는 LinkedHashMap을 통해 구현되어 있다.

  • 일반적인 Set과 다르게 입력된 순서를 유지한다.

Last updated