2010-03-10 10 views
12

Tengo una lista de objetos y necesito encontrar un objeto lo más rápido posible (por su propiedad de nombre). ¿Qué estructura de datos debería usar? Sé que puedo usar un diccionario, pero nunca habrá más de 10 elementos en la lista, y si recuerdo correctamente, el diccionario se implementa como una matriz si la colección contiene 10 elementos o menos.¿Debo usar un diccionario para colecciones con 10 elementos o menos, o hay una mejor alternativa?

Gracias.

+6

Por 10 elementos o menos, probablemente no importaría el tipo de estructura que utilice. –

+0

La elección de la estructura de datos depende de muchos otros factores además del tamaño. ¿Con qué frecuencia se insertarán y eliminarán los elementos? ¿Cuán crítica es la velocidad para encontrar un objeto? ¿Va a usarse esto en un circuito cerrado? ¿Cuán crítica es la velocidad de las inserciones y extracciones? ¿Son 10 elementos un límite difícil o un estadio de béisbol? –

+1

¿Ha perfilado su aplicación y ha determinado que se trata de un cuello de botella de rendimiento? Me sorprendería mucho si fuera así. – TrueWill

Respuesta

10

MSDN recomienda la ListDictionary de colecciones con 10 artículos o menos:

Esta es una implementación sencilla de IDictionary utilizando una lista enlazada. Es más pequeño y más rápido que una Hashtable si la cantidad de elementos es 10 o menos. Esto no debe usarse si el rendimiento es importante para un gran número de elementos.

+0

+1 ¡Esto suena perfecto para este propósito! –

+9

Esa recomendación puede estar desactualizada ya que ListDictionary no es genérico. Los documentos han dicho eso desde el principio. –

+0

Gracias Anna, esa parece ser la respuesta perfecta a mi pregunta. –

4

Es posible que desee considerar el System.Collections.Specialized.ListDictionary si está seguro de que habrá menos de diez elementos.

Considere también el System.Collections.Specialized.HybridDictionary que cambia el comportamiento (con una pequeña sobrecarga) si el tamaño aumenta por encima de un umbral, útil si su suposición es incorrecta.

0

¿Por qué no usar una Hashtable? Está en el espacio de nombres System.Collections.

+2

Porque las clases Dictionary <> y Hashtable son implementaciones de hashtables y tienen una sobrecarga al tener que calcular el hashcode para cada elemento que solo se paga solo cuando la colección no es trivialmente pequeña. –

2

Dado que desea la búsqueda más rápida posible en una propiedad, debe usar Dictionary<Key, Value>. El tamaño no te hace daño si quieres una búsqueda rápida. No es que un Dictionary<Key, Value> de solo 10 elementos o menos esté ocupando una tonelada de memoria. Dictionary<Key, Value> tiene un constructor que toma un int para establecer la capacidad.

Cuestiones relacionadas