C# - 我应该从什么集合大小开始使用字典

C# - From what collection size should I start using Dictionary

我很惊讶我找不到这个问题的答案。 所以我知道 Dictionary 在 O(1) 中渐进地查找,但有散列开销。对于集合大小,是否存在列表优于字典的经验法则?几十件?数百?几千?

根据我的经验,临界点在 10 - 50 项之间,具体取决于散列函数的使用模式和复杂性。但是您应该对您的数据进行基准测试,尤其是当您的自定义哈希函数可能需要一段时间来计算缓存时。

您还可以使用 HybridDictionary,它在内部是一个用于少量条目的列表,然后是哈希 table。 .Net 框架源代码 shows 9 项的切入点。

    public class HybridDictionary: IDictionary {

    // These numbers have been carefully tested to be optimal. Please don't change them
    // without doing thorough performance testing.
    private const int CutoverPoint = 9;
    private const int InitialHashtableSize = 13;
    private const int FixedSizeCutoverPoint = 6;     

更新:正如@Hans Passant 在上面的评论中指出的那样,混合词典没有通用版本,这会影响 boxing/unboxing 的性能和整体使用情况。所以,你应该小心并根据你的情况做基准。我的意思是要表明,大约 10 个项目可以成为开始使用字典与列表的一个点。