为什么.NET词典的FindEntry比简单循环要快?

时间:2018-12-22 10:05:44

标签: c# .net performance msdn

我试图了解.net C#词典的工作方式。我一直听说它的搜索机制很快。

在查看实现时,我看到了以下代码。 以下是FindEntry函数,如下所示: MSDN implementation

private int FindEntry(TKey key) {
        if( key == null) {
            ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
        }

        if (buckets != null) {
            int hashCode = comparer.GetHashCode(key) & 0x7FFFFFFF;
            for (int i = buckets[hashCode % buckets.Length]; i >= 0; i = entries[i].next) {
                if (entries[i].hashCode == hashCode && comparer.Equals(entries[i].key, key)) return i;
            }
        }
        return -1;
    }

有人可以向我解释一下,为什么上面的代码比简单的循环和简单的值检查要快吗? 示例:

private int FindEntry(TKey key) {
        if( key == null) {
            ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
        }

            for (i >= 0; i = entries[i].next) {
                if (entries[i].key == key) return i;
            }
        }
        return -1;
    }

0 个答案:

没有答案