HashSet<T>
해시셋 ( HashSet ) 은 C# 의 'System.Collections.Generic' 네임스페이스 안에 포함된 컬렉션 클래스 중 하나이다.
HaseSet<T> 은 중복되지 않는 요소 ( Unique elements )를 저장하는 집합 ( Set ) 형태의 컬렉션이다.
내부적으로 해시 테이블 ( Hash Table ) 을 사용하여 빠른 검색 , 추가 , 삭제가 가능하다.
즉 , 순서가 없고 중복이 허용되지 않는 데이터 집합이다.
문법
HashSet<T> 변수명 = new HashSet<T>();
▼주요 메서드
Add(T item); // 요소 추가
Remove(T item); // 요소 제거
Contains(T item); // 특정 요소 존재 여부 확인
Clear(); // 전체 요소 삭제
UnionWith(IEnumerable<T>);// 합집합
IntersectWith(IEnumerable<T>);// 교집합
ExceptWith(IEnumerable<T>);// 차집합
예시 코드
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// HashSet 생성
HashSet<int> numbers = new HashSet<int>();
// 요소 추가
numbers.Add(1);
numbers.Add(2);
numbers.Add(2); // 중복은 무시됨
numbers.Add(3);
Console.WriteLine("현재 요소:");
foreach (int n in numbers)
Console.WriteLine(n); // 1, 2, 3 (순서 일정하지 않음)
// 포함 여부 확인
Console.WriteLine(numbers.Contains(2)); // true
// 다른 집합과의 연산
HashSet<int> others = new HashSet<int>() { 2, 3, 4 };
numbers.UnionWith(others); // 합집합
Console.WriteLine("합집합 결과:");
foreach (int n in numbers)
Console.WriteLine(n); // 1, 2, 3, 4
}
}
주의할 점
- 순서가 유지되지 않는다.
└ 출력 순서가 추가한 순서와 다를 수 있다. - 중복 요소를 허용하지 않는다.
└ Add() 시 이미 존재하는 값은 무시된다. - Equals() 와 GethashCode()
└ 사용자 정의 클래스나 구조체를 HashSet 에 넣을 경우
└ 두 메서드를 올바르게 오버라이드해야 동일성 비교가 정확히 작동한다. - 성능
└ 평균적으로 O(1) 시간에 추가 / 삭제 / 검색 가능하다.
└ 해시 충돌이 많을 경우 성능이 떨어질 수 있다.
정리
HastSet<T>는 중복 없는 데이터 집합을 관리하는 해시 기반 컬렉션이다.