2009-10-21 9 views

Respuesta

5

No está muy lejos. Mirando el código fuente en el reflector, al parecer se utilizan tres colecciones internas:

private Entry<TKey, TValue>[] entries; 
private KeyCollection<TKey, TValue> keys; 
private ValueCollection<TKey, TValue> values; 

Tenga en cuenta que también hay una variable int[] buckets para realizar un seguimiento de la buckets requerido en el caso de colisiones de hash de código.

El propósito de estas variables debería ser bastante claro. Esto no es particularmente sorprendente, ya que la clase Dictionary es conocida y documentada para proporcionar (idealmente, con un artículo por segmento) O(1) tiempo de búsqueda.

2

Es todo claramente escrito en MSDN:

El Diccionario (De TKey, TValue) clase genérica proporciona una correspondencia entre un conjunto de llaves de un conjunto de valores. Cada adición al diccionario consiste en un valor y su clave asociada. Recuperar un valor usando su clave es muy rápido, cerca de O (1), porque la clase Diccionario (de TKey, TValue) se implementa como una tabla hash.

+0

Eso es todo cierto, por supuesto, pero no acaba de responder a la pregunta. Por supuesto, en realidad, importa poco sobre la implementación interna, sino sobre el borrador. complejidad. – Noldorin

3

Es hashtable. Para cada clave, Dictionary calcula su código hash y lo utiliza como un puntero para colocar donde debe residir el valor. Si hay dos claves que coinciden con el mismo código hash, dicha situación se llama colisión e internamente para este caso especial Diccionario utiliza árbol binario.

La complejidad algorítmica del Diccionario (hashtable) es O (1) y en el peor de los casos O (log (N)) (el peor caso significa que solo tratamos con colisiones), donde N es un número de elementos en Dictionary.

Cuestiones relacionadas