정의 : HashSet이란 무엇입니까?
HashSet C # HashSet 데이터 구조는 .NET Framework 3.5에서 도입되었습니다. 구현 된 멤버의 전체 목록은 HashSet MSDN 페이지 에서 찾을 수 있습니다 .
- 어디에서 사용 되나요?
- 왜 그것을 사용하고 싶습니까?
-
A
HashSet
는 일련의 객체를 보유하지만 객체가 이미 세트에 있는지 여부를 쉽고 빠르게 확인할 수 있도록합니다. 내부적으로 배열을 관리하고 객체의 해시 코드에서 계산 된 색인을 사용하여 객체를 저장합니다. 여기를보세요HashSet
고유 한 요소를 포함하는 정렬되지 않은 컬렉션입니다. 표준 수집 작업 인 Add, Remove, Contains가 있지만 해시 기반 구현을 사용하므로 이러한 작업은 O (1)입니다. (예를 들어, 포함 및 제거의 경우 O (n) 인 목록과 반대) 유니온 , 교차점 및 대칭 차이 와HashSet
같은 표준 세트 작업도 제공합니다 . 여기를보세요
세트의 다른 구현이 있습니다. 일부는 해싱 요소를 통해 삽입 및 조회 작업을 매우 빠르게 만듭니다. 그러나 이는 요소가 추가 된 순서가 손실되었음을 의미합니다. 다른 구현에서는 실행 시간이 느려지면서 추가 주문을 유지합니다.
HashSet
C # 의 클래스는 첫 번째 접근 방식을 따르므로 요소의 순서를 유지 하지 않습니다 . 일반보다 훨씬 빠릅니다 List
. 일부 기본 벤치 마크는 기본 유형 (int, double, bool 등)을 처리 할 때 HashSet이 상당히 빠르다는 것을 보여주었습니다. 클래스 객체로 작업 할 때 훨씬 빠릅니다. 요점은 HashSet이 빠르다는 것입니다.
유일하게 파악할 수있는 HashSet
것은 인덱스로 액세스 할 수 없다는 것입니다. 액세스 요소에 당신도 열거를 사용하거나 변환하는 내장 기능을 사용할 수 있습니다 HashSet
에 List
그 통해 반복 처리. 여기를보세요
A HashSet
에는 내부 구조 (해시)가있어 항목을 빠르게 검색하고 식별 할 수 있습니다. 단점은 HashSet
(또는 인덱스별로 항목을 가져 오는) 반복하는 것이 다소 느리다는 것입니다.
그렇다면 왜 누군가가 세트에 항목이 있는지 알고 싶어할까요?
a HashSet
가 유용한 상황 중 하나 는 중복이 존재할 수있는 목록에서 고유 한 값을 얻는 것입니다. 항목이 추가 HashSet
되면 해당 항목이 존재하는지 빠르게 판단 할 수 있습니다 ( Contains
연산자).
의 다른 장점은 HashSet
설정 작업이다 : IntersectWith
, IsSubsetOf
, IsSupersetOf
, Overlaps
, SymmetricExceptWith
, UnionWith
.
오브젝트 제한 조건 언어에 익숙 하면 이러한 세트 조작을 식별 할 수 있습니다. 또한 실행 가능한 UML 구현에 한 걸음 더 다가간 것을 알 수 있습니다.
간단히 말해서 부엌의 비밀을 밝히지 않고 : 일반적으로 세트는 중복 요소가 없으며 특정 순서가없는 컬렉션입니다. 따라서 A HashSet<T>
는 generic과 유사 List<T>
하지만 순서가 손실되는 대신 이름이 암시하는 것처럼 해시 테이블을 통한 빠른 조회에 최적화되어 있습니다.
응용 프로그램 관점에서 볼 때 중복을 피해야하는 경우 HashSet
조회, 삽입 및 제거 복잡성이 O (1) -constant이므로 찾고 있습니다. 이것이 의미하는 바는 요소 HashSet
의 수를 확인하는 데 동일한 시간이 걸리는 요소 가 중요하지 않으며 O (1)에 요소를 삽입하기 때문에 이러한 종류의 작업에 완벽합니다.
참고 URL : https://stackoverflow.com/questions/4558754/define-what-is-a-hashset
'development' 카테고리의 다른 글
가장 좋아하는 언어에 대해 싫어하는 다섯 가지는 무엇입니까? (0) | 2020.02.21 |
---|---|
PHP 스크립트를 어떻게 디버깅합니까? (0) | 2020.02.21 |
Vim 80 열 레이아웃 문제 (0) | 2020.02.20 |
cp 명령으로 파일을 대상에 복사하는 데 필요한 폴더를 작성하는 방법 (0) | 2020.02.20 |
Chrome과 같은 더 나은 브라우저로 .NET WebBrowser 컨트롤을 대체 하시겠습니까? (0) | 2020.02.20 |