Bu soruya verilen kabul edilen cevap, soruyu geçerli bir şekilde YANITLAMAZ! Doğru cevabı verir, ancak bu cevap, sundukları kanıtlarla gösterilmez.
Bu cevabın gösterdiği şey, a'da Anahtar aramalarının Dictionary
veya HashSet
a'da aramaktan çok daha hızlı olduğudur List
. Bu doğru, ama ilginç değil, şaşırtıcı değil, aynı hıza sahip olduklarının kanıtı .
Arama sürelerini karşılaştırmak için aşağıdaki kodu çalıştırdım ve sonucum bunların aslında aynı hızda olduklarıdır. (Ya da en azından herhangi bir fark varsa, o zaman fark o hızın Standart Sapması dahilindedir)
Özellikle, bu testte benim için 100.000.000 arama her ikisi için de 10 ila 11,5 saniye sürüyordu.
Test Kodu:
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");
}
}