我试图了解.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;
}