私は単純な要件を持っています。私は数百万の文字列を持っており、小さなセットに存在するかどうかをテストしたいと思っています。私はList<T>
とHashSet<T>
をこのセットに使用するかどうか疑問に思っています。どのようにHashSetが<T>です。リストよりも速く収まる<T>.Contains?
たとえば、100個の文字列があり、数百万の文字列が存在するかどうかを確認する必要がある場合は、HashSet<T>
が最適です。
しかし、私の場合は
は、.NETはとても速くなる可能性がList<T>
の
Contains
を呼び出し、
HashSet<T>
に
Contains
を呼び出すときにハッシュの何百万人(
GetHashCode
への呼び出し)を計算するために持っているようですか?
この前提が正しいかどうか誰にも説明できますか?
非常に良い答え!私はHybridDictionaryクラスを見つけました。ここでは値をnullとして保存して、それをHashSetと同じように本質的にしています。 – Muis
@ Joshua:具体的なパフォーマンスデータなしで、非genericのHybridDictionaryクラス(要素を含むだけでなく値にキーをマッピングするクラス)を使用しません。 'List'と 'HashSet 'の両方が遅すぎますか? 'HybridDictionary'は、実際のデータと、EqualsとGetHashCodeの呼び出しがどれほど高価であるかに依存して、スイッチオーバーポイントが意味を成す場所が分からないことに注意してください。 –
私は現在、HashSetを使用していますが、時には3つの値が含まれていることもあり、時には何千もの値が含まれているため、例えばHybridHashsetのようなものを探しています。私は正確に '100'を決して計算することはできないことを知っていますが、おそらくそれで十分でしょう。 –
Muis