이 질문에 대해 허용 된 답변은 질문에 대한 올바른 답변이 아닙니다! 정답을 제공하지만 그 답은 그들이 제공 한 증거로 보여지지 않습니다.
그 대답이 보여주는 것은 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");
}
}