-
C# 프로그래밍의 기초: 해시셋(HashSet)2024년 08월 24일
- 유니얼
-
작성자
-
2024.08.24.:31
728x90HashSet<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을 사용하는 것은 효과적인 선택입니다.
반응형다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드
받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이
감지되어도 모달 창이 표시되지 않습니다.)