• 티스토리 홈
  • 프로필사진
    유니얼
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
유니얼
  • 프로필사진
    유니얼
    • 분류 전체보기 (295)
      • Unity (17)
        • 게임 개발 (5)
      • Unreal (24)
        • 게임 개발 (20)
      • DirectX (36)
      • 코딩테스트 (91)
        • 프로그래머스 (25)
        • 백준 (66)
      • Google Workspace (1)
      • Programing (102)
        • C# (68)
        • C++ (24)
        • JavaScript (10)
      • 게임 서버 프로그래밍 (17)
      • Web (6)
        • 슈퍼코딩 (6)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
    등록된 댓글이 없습니다.
  • 최근 공지
    등록된 공지가 없습니다.
# Home
# 공지사항
#
# 태그
# 검색결과
# 방명록
  • C# 프로그래밍의 기초: 해시셋(HashSet)
    2024년 08월 24일
    • 유니얼
    • 작성자
    • 2024.08.24.:31
    728x90

    HashSet<T>은 C#에서 제공하는 중복을 허용하지 않는 컬렉션으로, 성능이 중요한 상황에서 빠르고 효율적인 데이터 관리를 가능하게 합니다. 이 블로그 포스트에서는 HashSet의 주요 특징과 활용 방법을 살펴보고, C#에서의 구현 예를 통해 이해를 돕고자 합니다.

    HashSet의 기본 개념

    HashSet은 집합 개념을 구현한 자료구조로, 각 요소가 유일함을 보장합니다. 이는 특정 요소의 존재 유무를 빠르게 확인할 수 있어, 중복 검사가 필요한 많은 애플리케이션에서 유용하게 사용됩니다.

    주요 특징 및 장점

    1. 중복 허용 안 함: HashSet은 동일한 요소를 두 번 추가하지 않습니다. 요소가 이미 존재하면 추가 작업이 무시됩니다.
    2. 빠른 데이터 접근: 해시 테이블을 기반으로 구현되어 있기 때문에 삽입, 삭제, 검색 작업의 평균 시간 복잡도가 O(1)입니다.
    3. 순서 보장 없음: 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일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
목차
표시할 목차가 없습니다.
    • 안녕하세요
    • 감사해요
    • 잘있어요

    티스토리툴바