극적으로 좋습니다. 이제 다른 작업에 대한 목록을 사용해야하는 경우 두 가지를 모두 사용할 수 있습니다.
var list = BuildListOfStrings();
var set = new HashSet<string>(list);
if (set.Contains("Test"))
{
// ...
}
이제 세트의 항목을 O(1)
조작으로 찾을 수 있습니다.
테스트
static void Main(string[] args)
{
var lst = GenerateStrings().Take(5000000).ToList();
var hsh = new HashSet<string>(lst);
var found = false;
var count = 100;
var sw = Stopwatch.StartNew();
for (int i = 0; i < count; i++)
{
hsh = new HashSet<string>(lst);
}
Console.WriteLine(TimeSpan.FromTicks(sw.ElapsedTicks/count));
sw = Stopwatch.StartNew();
for (int i = 0; i < count; i++)
{
found = lst.Contains("12345678");
}
Console.WriteLine(TimeSpan.FromTicks(sw.ElapsedTicks/count));
sw = Stopwatch.StartNew();
for (int i = 0; i < count; i++)
{
found = hsh.Contains("12345678");
}
Console.WriteLine(TimeSpan.FromTicks(sw.ElapsedTicks/count));
Console.WriteLine(found);
Console.ReadLine();
}
private static IEnumerable<string> GenerateStrings()
{
var rnd = new Random();
while (true)
{
yield return rnd.Next().ToString();
}
}
결과
0.308438 s
0.0197868 s
0.0 s
은 그래서 이것은 우리에게 무엇입니까? Contains
으로 소량의 전화를 걸려면 List<string>
을 사용하고, 그렇지 않으면 HashSet<string>
을 사용하십시오.
필수 : 테스트를 마쳤습니까? – ChaosPandion