¡La respuesta aceptada a esta pregunta NO responde válidamente a la pregunta! Da la respuesta correcta, pero esa respuesta no se muestra en la evidencia que proporcionaron.
Lo que muestra esa respuesta es que las búsquedas clave en un Dictionaryo HashSetson mucho más rápidas que buscar en un List. Lo cual es cierto, pero no interesante, ni sorprendente, ni prueba de que tengan el mismo velocidad.
Ejecuté el siguiente código para comparar los tiempos de búsqueda y mi conclusión es que, de hecho, SON a la misma velocidad. (O al menos, si hay alguna diferencia, entonces la diferencia está dentro de la desviación estándar de esa velocidad)
Específicamente, 100.000.000 de búsquedas tardaron entre 10 y 11,5 segundos para ambos, para mí, en esta prueba.
Código de prueba:
private const int TestReps = 100_000_000;
[Test]
public void CompareHashSetContainsVersusDictionaryContainsKey()
{
for (int j = 0; j < 10; j++)
{
var rand = new Random();
var dict = new Dictionary<int, int>();
var hash = new HashSet<int>();
for (int i = 0; i < TestReps; i++)
{
var key = rand.Next();
var value = rand.Next();
hash.Add(key);
dict.TryAdd(key, value);
}
var testPoints = Enumerable.Repeat(1, TestReps).Select(_ => rand.Next()).ToArray();
var timer = new Stopwatch();
var total = 0;
timer.Restart();
for (int i = 0; i < TestReps; i++)
{
var newKey = testPoints[i];
if (hash.Contains(newKey))
{
total++;
}
}
Console.WriteLine(timer.Elapsed);
var target = total;
Assert.That(total == target);
timer.Restart();
for (int i = 0; i < TestReps; i++)
{
var newKey = testPoints[i];
if (dict.ContainsKey(newKey))
{
total++;
}
}
Console.WriteLine(timer.Elapsed);
Assert.That(total == target * 2);
Console.WriteLine("Set");
}
}