본문으로 바로가기

[C#][자료구조] HashSet<T>

category C#/자료구조 2025. 9. 21. 16:12
반응형

✅ HashSet<T>

📌 HashSet이란?

HashSet<T>중복 없는 요소만 저장하는 집합(Set) 컬렉션입니다. 내부적으로 해시 테이블(Hash Table)을 사용하여 삽입/삭제/검색이 평균적으로 O(1)로 매우 빠릅니다.

즉, 리스트(List)와 달리 같은 값은 두 번 들어갈 수 없고, 집합 연산(합집합, 교집합, 차집합)을 지원한다는 점이 특징입니다.

📌 HashSet은 언제 사용될까?

  • 데이터 중복을 허용하지 않아야 할 때
  • 빠른 검색과 삽입/삭제가 필요할 때
  • 집합 연산(Union, Intersect, Except)을 활용할 때
  • 고유 ID, 태그, 방문 여부 체크(예: 그래프 탐색)

📊 기본 연산과 시간 복잡도

연산 설명 평균 시간 복잡도
Add 요소 추가 (중복 시 false 반환) O(1)
Remove 특정 요소 제거 O(1)
Contains 특정 값 존재 여부 확인 O(1)
UnionWith 합집합 O(M+N)
IntersectWith 교집합 O(M+N)
ExceptWith 차집합 O(M+N)

* M, N은 각각 두 집합의 원소 개수입니다.

✅ C#에서의 HashSet

📌 기본 사용법


using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var set = new HashSet();

        // 추가
        set.Add(1);
        set.Add(2);
        set.Add(2); // 중복 -> 무시됨

        Console.WriteLine(string.Join(", ", set)); // 1, 2

        // 검색
        Console.WriteLine(set.Contains(1)); // True
        Console.WriteLine(set.Contains(3)); // False

        // 삭제
        set.Remove(1);
        Console.WriteLine(string.Join(", ", set)); // 2

        // 집합 연산
        var a = new HashSet {1, 2, 3};
        var b = new HashSet {3, 4, 5};

        a.UnionWith(b);        // 합집합 {1,2,3,4,5}
        a.IntersectWith(b);    // 교집합 {3,4,5}
        a.ExceptWith(b);       // 차집합 {}
    }
}

📌 HashSet vs List vs Dictionary

구분 List<T> HashSet<T> Dictionary<TKey,TValue>
중복 허용 Key 기준 ❌
검색 속도 O(N) O(1) O(1)
순서 보장 삽입 순서 유지
데이터 구조 동적 배열 해시 테이블 해시 테이블

📝 정리

  • HashSet<T>는 중복 없는 집합 자료구조
  • 삽입/삭제/검색 평균 O(1)
  • 집합 연산(합집합, 교집합, 차집합) 지원
  • 순서가 중요한 경우에는 적합하지 않음
  • 고유 데이터 관리, 빠른 검색에 유리
반응형

'C# > 자료구조' 카테고리의 다른 글

[C#][자료구조] SortedList와 SortedDictionary  (0) 2025.10.01
[C#][자료구조] LinkedList<T>  (0) 2025.09.22
[C#][자료구조] List<T>  (0) 2025.09.19
[C#][자료구조] HashTable  (0) 2025.09.18
[C#][자료구조] Dictionary<TKey, TValue>  (1) 2025.09.17