คำตอบที่ยอมรับสำหรับคำถามนี้ไม่สามารถตอบคำถามได้อย่างถูกต้อง! เกิดขึ้นเพื่อให้คำตอบที่ถูกต้อง แต่คำตอบนั้นไม่ได้แสดงโดยหลักฐานที่พวกเขาให้มา
คำตอบนั้นแสดงให้เห็นว่าการค้นหาคีย์บน a Dictionary
หรือHashSet
เร็วกว่าการค้นหาในไฟล์List
. ซึ่งเป็นเรื่องจริง แต่ไม่น่าสนใจและไม่น่าแปลกใจหรือพิสูจน์ได้ว่ามีความเร็วเท่ากัน
ฉันใช้รหัสด้านล่างเพื่อเปรียบเทียบเวลาในการค้นหาและข้อสรุปของฉันก็คือพวกเขามีความเร็วเท่ากัน (หรืออย่างน้อยถ้ามีความแตกต่างแสดงว่าผลต่างอยู่ในค่าเบี่ยงเบนมาตรฐานของความเร็วนั้นด้วย)
โดยเฉพาะอย่างยิ่งการค้นหา 100,000,000 ครั้งใช้เวลาระหว่าง 10 ถึง 11.5 วินาทีสำหรับทั้งสองอย่างสำหรับฉันในการทดสอบนี้
รหัสทดสอบ:
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");
}
}