2017-12-10 10 views
1

Java HashMap 요소는 요소 키의 해시를 기반으로 "버킷"에 저장된다는 것을 알고 있습니다. C# 사전에서 같은 해싱이 발생합니까? 그렇지 않다면 조회는 어떻게 작동합니까?C# 사전은 Java HashMaps와 같은 방식으로 해싱을 사용합니까?

+0

@ maytham-H은 Hashtables와 다른 사전이 아닙니다. –

+1

예, C#'Dictionary '도 같은 방식으로 작동합니다. 버킷은 해시 공간을 더 작고 관리하기 쉬운 덩어리로 분할하고 해시 충돌을 처리하는 데 사용됩니다. 버킷 수는 사전 용량보다 큰 첫 번째 소수입니다 (따라서 첫 번째 항목을 사전에 삽입하면 3 개의 버킷이 포함됨). 용량을 늘릴 필요가있을 때마다 항목이 새 버킷으로 다시 배열됩니다. – Groo

+0

이것이 왜 XY 문제인지 묻는 이유는 무엇입니까? - https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem? – mjwills

답변

4

C# System.Collections - namespace에는 여러 종류의 사전이 있습니다. 그들은 서로 다른 전략을 사용하여 내부 데이터를 저장합니다.

System.Collections.Specialized.HybridDictionary 은 특정 크기에 도달 할 때까지 DoubleLinkedLists를 사용하고 해시로 전환합니다. "보통"System.Collections.Generics-Dictionary은 항상 내부적으로 해시를 사용합니다. 원할 경우 동시 사용을위한 사전도 있습니다. - 자신을 찾아보십시오 (Concurrent Dictionary).

따라서 사용중인 사전의 종류에 따라 (위의 경우) 성능 또는 기타 이유로 사용중인 클래스의 내부 고려 사항으로 인해 변경 될 수 있습니다.