HashSet 사전 대 항목이 있는지 확인하기위한 검색 시간
HashSet<T> t = new HashSet<T>();
// add 10 million items
Dictionary<K, V> t = new Dictionary<K, V>();
// add 10 million items.
누구의 .Contains방법이 더 빨리 돌아 올까요?
명확히하기 위해 제 요구 사항은 데이터 구조에 존재하는지 확인해야하는 천만 개의 개체 (실제로 문자열)가 있다는 것입니다. 나는 절대 반복하지 않을 것입니다.
HashSet vs List vs Dictionary 성능 테스트, 여기 에서 가져 왔습니다 .
1000000 개의 개체 추가 (중복을 확인하지 않고)

10000 컬렉션의 절반 개체에 대한 검사 포함

10000 컬렉션의 절반 개체 제거

Dictionary<TKey, TValue>두 번째 경우 를 의미한다고 생각 합니까? HashTable제네릭이 아닌 클래스입니다.
실제 요구 사항에 따라 작업에 적합한 컬렉션을 선택해야합니다. 실제로 마십시오 원하는 값으로 각 키를 매핑? 그렇다면 Dictionary<,>. 다음과 같은 경우 에만 일련의 사용으로 신경 HashSet<>.
나는 기대 HashSet<T>.Contains와 Dictionary<TKey, TValue>.ContainsKey그들이 근본적으로 동일한 알고리즘을 사용 - 기본적으로 동일한을 수행하기 위해 (당신이 현명하게 당신의 사전을 사용하는 가정하고 비교 작업있는). 항목 Dictionary<,>이 커지면 캐시를을 사용하는 Dictionary<,>것보다 캐시를 날려 버릴 가능성이 더 커지지 HashSet<>만 단순히 잘못된 데이터 유형을 선택하는 고통과 비교할 때 중요하지 않을 것으로 예상합니다. 달성하려고.
Dictionary <TKey, TValue>에 대한 MSDN 설명서에서
" Dictionary 클래스가 해시 테이블로 구현되기 때문에 키를 사용하여 값을 검색하는 것은 O (1)에 가까워 매우 빠릅니다 . "
메모 :
"검색 속도는 TKey에 지정된 유형의 해싱 알고리즘 품질에 따라 다릅니다."
귀하의 질문 / 게시물이 오래되었다는 것을 알고 있지만 비슷한 질문에 대한 답변을 찾는 동안이 문제를 발견했습니다.
도움이 되었기를 바랍니다. 자세한 내용을 보려면 비고 섹션으로 스크롤 하십시오. https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx
이들은 다른 데이터 구조입니다. 또한 일반 버전의 HashTable.
HashSet키-값 쌍을 포함 하는 HashTable(또는 Dictionary) 유형 T의 값을 포함합니다 . 따라서 저장해야 할 데이터에 대한 수집을 선택해야합니다.
'Programing' 카테고리의 다른 글
| 싱글 클릭 이벤트와 더블 클릭 이벤트를 어떻게 구분하나요? (0) | 2020.08.19 |
|---|---|
| Java에서 CharSequence와 String의 정확한 차이점 (0) | 2020.08.19 |
| goto를 사용하면 어떤 문제가 있습니까? (0) | 2020.08.19 |
| Java의 String.contains () 메서드에서 regex를 사용하는 방법 (0) | 2020.08.19 |
| ASP.NET MVC 3에서 JSON.NET을 기본 JSON 직렬 변환기로 사용하는 것이 가능합니까? (0) | 2020.08.19 |