Programing/C#
C# 프로그래밍의 기초: 해시셋(HashSet)
유니얼
2024. 8. 24. 15:31
728x90
HashSet<T>은 C#에서 제공하는 중복을 허용하지 않는 컬렉션으로, 성능이 중요한 상황에서 빠르고 효율적인 데이터 관리를 가능하게 합니다. 이 블로그 포스트에서는 HashSet의 주요 특징과 활용 방법을 살펴보고, C#에서의 구현 예를 통해 이해를 돕고자 합니다.
HashSet의 기본 개념
HashSet은 집합 개념을 구현한 자료구조로, 각 요소가 유일함을 보장합니다. 이는 특정 요소의 존재 유무를 빠르게 확인할 수 있어, 중복 검사가 필요한 많은 애플리케이션에서 유용하게 사용됩니다.
주요 특징 및 장점
- 중복 허용 안 함: HashSet은 동일한 요소를 두 번 추가하지 않습니다. 요소가 이미 존재하면 추가 작업이 무시됩니다.
- 빠른 데이터 접근: 해시 테이블을 기반으로 구현되어 있기 때문에 삽입, 삭제, 검색 작업의 평균 시간 복잡도가 O(1)입니다.
- 순서 보장 없음: HashSet은 요소의 삽입 순서를 유지하지 않습니다. 따라서 순서에 의존하는 작업에는 적합하지 않습니다.
주요 메서드 및 활용
- Add(T item): 요소를 추가하며, 이미 존재하는 경우 추가하지 않습니다.
- Remove(T item): 지정된 요소를 제거합니다.
- Contains(T item): 특정 요소가 HashSet에 있는지 확인합니다.
- Clear(): 모든 요소를 제거합니다.
- 집합 연산: UnionWith, IntersectWith, ExceptWith, SymmetricExceptWith 등의 메서드로 기본적인 집합 연산을 수행할 수 있습니다.
전체예제 코드
using System;
using System.Collections.Generic;
namespace CSharp_ProgramingStudy.Chapter6_DataStructure
{
public class Class7
{
public void Run()
{
// 정수를 저장하는 HashSet 생성
HashSet<int> numbers = new HashSet<int>();
// 요소 추가
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);
// 중복 요소 추가 시도 (추가되지 않음)
bool added = numbers.Add(3);
Console.WriteLine($"Was 3 added? {added}"); // 출력: Was 3 added? False
// 요소 포함 여부 확인
bool contains = numbers.Contains(2);
Console.WriteLine($"Contains 2? {contains}"); // 출력: Contains 2? True
// 요소 제거
bool removed = numbers.Remove(2);
Console.WriteLine($"Was 2 removed? {removed}"); // 출력: Was 2 removed? True
// HashSet의 모든 요소 출력
Console.WriteLine("Current elements in HashSet:");
foreach (int number in numbers)
{
Console.WriteLine(number); // 출력: 1, 3 (순서는 보장되지 않음)
}
// 다른 컬렉션과의 연산 예시
HashSet<int> otherNumbers = new HashSet<int> { 3, 4, 5 };
// 합집합
// numbers = {1,3}
// otherNumbers = { 3, 4, 5 };
// 합집합 => {1,3,4,5}
numbers.UnionWith(otherNumbers);
Console.WriteLine("UnionWith result:");
foreach (int number in numbers)
{
Console.WriteLine(number); // 출력: 1, 3, 4, 5 (순서는 보장되지 않음)
}
// 교집합
// numbers = {1,3,4,5}
// otherNumbers = { 3, 4, 5 };
// 교집합 => {3,4,5}
numbers.IntersectWith(otherNumbers);
Console.WriteLine("IntersectWith result:");
foreach (int number in numbers)
{
Console.WriteLine(number); // 출력: 3, 4, 5 (순서는 보장되지 않음)
}
// 차집합
// numbers = {3,4,5}
// otherNumbers = { 3, 4, 5 };
// 교집합 => {}
numbers.ExceptWith(otherNumbers);
Console.WriteLine("ExceptWith result:");
foreach (int number in numbers)
{
Console.WriteLine(number); // 출력: 빈 출력
}
}
}
}
결론
HashSet<T>은 중복을 방지하고 성능이 중요한 애플리케이션에서 데이터를 관리할 때 매우 유용합니다. C#에서 제공하는 HashSet 클래스는 집합 연산을 지원하여 복잡한 데이터 관리 요구 사항을 간단하게 해결할 수 있습니다. 데이터의 유일성을 보장해야 할 때 HashSet을 사용하는 것은 효과적인 선택입니다.
반응형