당신은 어떻게보고 조금 파고있어 사전이 아니라 그것의하지 분명 - C #으로 구현 되는 HashMap (해시 테이블) 또는 트리 맵 (정렬 된 나무) (또는 ConcurrentSkipListMap과 - 스킵리스트 ).
"비고"섹션을 살펴보면 :
Dictionary 일반 클래스는 키 세트에서 값 세트로의 맵핑을 제공합니다. 사전에 추가 할 때마다 값과 관련 키로 구성됩니다. Dictionary 클래스는 해시 테이블로 구현되기 때문에 키를 사용하여 값을 검색하는 것은 O (1)에 가까운 매우 빠릅니다.
그리고 우리는 그것을 가지고 있습니다. 그것은이다 해시 테이블 . Wikipedia 기사를 링크했습니다. 충돌 해결에 대한 섹션을 읽으십시오. 조회가 O (N)으로 이동하는 병리학적인 데이터 세트를 얻을 수 있습니다 (예를 들어 삽입하는 모든 것이 해시 테이블의 동일한 해시 값 또는 인덱스에 속하며 어떤 이유로 선형 프로빙으로 남습니다 ).
사전은 범용 솔루션이지만 사전과 같은 구체적인 유형을 통과해서는 안되며 인터페이스를 통과해야합니다. 이 경우 해당 인터페이스는 IDictionary
( docs )입니다. 이를 위해 보유한 데이터에 대해 최적의 작업을 수행하는 사전 구현을 완벽하게 작성할 수 있습니다.
다양한 조회 / 포함의 효율성에 대해?
- 분류되지 않은 목록 걷기 : O (N)
- 정렬 된 배열의 이진 검색 : O (log N)
- 정렬 된 트리 : O (log N)
- 해시 테이블 : O (1)
대부분의 사람들에게 해시 테이블은 원하는 것입니다.
SortedDictionary 가 원하는 것을 찾을 수 있습니다 .
SortedDictionary<TKey, TValue>
제네릭 클래스는 n은 사전에있는 요소의 수입니다 O (로그 n)이 검색과 이진 검색 트리입니다. 이와 관련하여 SortedList<TKey, TValue>
일반 클래스 와 유사합니다 . 두 클래스는 비슷한 객체 모델을 가지며 둘 다 O (log n) 검색을 갖습니다.
데이터 구조가 데이터와 이상적으로 작동하는 것이 아니라면 데이터에 가장 적합한 구조를 작성할 수있는 도구 (인터페이스)가 제공됩니다.
사전 자체는 추상 데이터 유형 입니다. 당신은 나에게 사전을 주었고 나는 그것으로 할 수있는 일과 거기에있는 모든 도구가 사전이라는 성격으로 사용할 수 있다는 것을 알고 있습니다. ArrayList를 주면 목록에서 항목을 검색, 삽입 또는 삭제하기위한 자체 코드를 작성하는 것을 알 수 있습니다. 이것은 내 시간을 낭비하고 코드를 반복해서 복사 할 때 버그가 발생할 가능성이 더 크다는 것을 의미합니다.
Data Structures
이 위키 링크가 도움이 될 것입니다.