c# List, Dictionary, HashSet

Dictionanry

Update

LINQ 로 검색

출력 결과

위 코드를 실행하면 아래와 같은 출력이 예상됩니다.

프로그래밍에서 HashSet은 효율적인 방식으로 유니크한 요소를 저장하는 컬렉션입니다. 특히, 요소가 컬렉션에서 한 번만 나타나야 하고, 빠르게 접근할 필요가 있을 때 유용합니다. HashSet은 다양한 프로그래밍 언어에서 구현되어 있으며, 속성과 메서드는 다소 다를 수 있지만, 기본 원리는 비슷합니다.

HashSet의 특성:

  1. 유니크함 : 각 요소는 유니크해야 하며, 중복은 허용되지 않습니다. 중복 요소를 추가하려고 하면 추가가 실패하거나 무시됩니다.
  2. 순서 : 요소의 순서를 유지하지 않습니다. 따라서 HashSet의 요소를 반복해서 접근할 때 매번 다른 순서로 나타날 수 있습니다.
  3. 효율성 : 요소를 추가하거나 제거하거나 요소의 존재 여부를 확인하는 작업은 매우 효율적으로 실행되며, 일반적으로 상수 시간, O(1) 에 실행됩니다. 이러한 효율성은 요소들이 버킷 배열의 인덱스로 해싱되는 해시 테이블을 사용하기 때문입니다.
  4. Null 값 : Null 값을 허용할 수도 있고 그렇지 않을 수도 있습니다. 예를 들어, 자바에서는 Null 요소를 하나 포함할 수 있고, .NET에서도 요소의 유형이 허용하는 경우 Null 을 저장할 수 있습니다.

HashSet의 실용적 용도:

  • 중복 제거: 아이템 컬렉션에서 중복을 제거합니다.
  • 멤버십 테스트: 아이템이 세트에 존재하는지 빠르게 확인합니다.
  • 교집합과 차집합: 세트간의 공통 요소나 차이를 효과적으로 찾습니다.

C#에서의 예시:

데이터의 유니크함을 보장하고 효율적으로 데이터를 관리할 수 있습니다. 요소의 순서가 중요하지 않고, 중복을 허용하지 않아야 할 때 적합한 선택입니다.

  1. List
    특징: 요소들이 순차적으로 저장되며, 중복을 허용합니다.
    장점: 인덱스를 통한 접근이 빠르고, 순서가 보장됩니다.
    단점: 요소의 추가 및 삭제에 따라 성능이 저하될 수 있으며, 특정 요소를 찾기 위해서는 순차 탐색을 해야 해서 비효율적일 수 있습니다.
    적합한 사용 예: 순서가 중요하거나 중복된 요소를 허용해야 하는 경우, 예를 들어 순서대로 처리해야 하는 작업 목록 관리 등.
  2. Dictionary
    특징: 키-값 쌍으로 데이터를 저장하며, 각 키는 유니크해야 합니다.
    장점: 키를 통한 데이터 접근이 매우 빠르며, 키에 의한 직접적인 데이터 검색이 가능합니다.
    단점: 메모리 사용이 List나 HashSet에 비해 상대적으로 크고, 키 값이 필요합니다.
    적합한 사용 예: 키를 통해 빠르게 값을 검색하거나 업데이트해야 할 때, 예를 들어 사용자 ID로 사용자 정보를 빠르게 찾아야 하는 경우.
  3. HashSet
    특징: 유니크한 요소만 저장되며, 요소들의 순서는 무작위입니다.
    장점: 요소의 추가, 삭제, 검색이 매우 빠릅니다.
    단점: 요소의 순서가 유지되지 않고, 값의 중복을 허용하지 않습니다.
    적합한 사용 예: 요소의 유니크함이 중요하거나 중복을 피하고 싶을 때, 예를 들어 방문자의 IP 주소를 저장하며 중복 방문을 체크할 때.
  4. 상황에 따른 선택:
    순서 유지와 중복 허용: List
    빠른 검색 및 유니크한 키-값 쌍 관리: Dictionary
    유니크한 요소의 빠른 추가, 삭제, 검색: HashSet