Semánticamente, una Dictionary<int, T>
y List<T>
son muy similares, ambos son recipientes de acceso aleatorio del marco .NET. Para usar una lista como reemplazo de un diccionario, necesita un valor especial en su tipo T
(like null
) para representar los espacios vacíos en su lista. Si T
no es un tipo anulable como int
, podría usar int?
en su lugar, o si solo espera almacenar valores positivos, también podría usar un valor especial como -1 para representar ranuras vacías.
El que elija dependerá del rango de los valores clave. Si sus claves Dictionary<int, T>
están dentro de un intervalo entero, sin muchos espacios entre ellas (por ejemplo, 80 valores de [0, ... 100]), entonces List<T>
será más apropiado, ya que el acceso por índice es más rápido, y En este caso, hay menos sobrecarga de memoria y tiempo en comparación con un diccionario.
Si sus valores clave son 100 int
valores de un rango como [0, ..., 1000000], entonces a List<T>
necesita memoria para contener 1000000 valores de T, donde su diccionario solo necesitará memoria en un orden de magnitud alrededor de 100 valores de T, 100 valores de int (más algunos gastos generales, en realidad esperan aproximadamente 2 veces la memoria para almacenar esas 100 claves y valores). Entonces, en el último caso, un diccionario será más apropiado.
List<T>
dentro del marco .NET es una matriz de acceso aleatorio, donde una operación de búsqueda suele ser más rápida que para aDictionary<int,T>
.Dictionary<TKey, TValue>
.