-1

如果我想为协议创建一个类型对象,则Dictionary<Key:Value>()它是必需的。为什么会这样,字典是如何实现的?KeyHashable

我的意思是我会理解,如果Key只是需要符合Equatable类型的协议,因为程序将不得不搜索相关的值,但是,var hashValue: Int随之而来的额外Hashable内容有点令人困惑

4

1 回答 1

1

可散列键使字典插入和查找更加高效,尤其是对于大型字典。

如果键不可散列,为了找到特定键,您必须(在最坏的情况下)读取并比较字典中的所有键是否相等。

可散列的键自然会按其哈希值划分为桶,要找到特定的键,您需要计算其哈希以确定它所在的桶,然后您只需要比较属于同一桶的相等键。如果哈希函数选择正确并且字典中的元素数小于最大值Int,那么每个桶只有一个键的机会很大,从而使查找效率与 O(1) 一样高。

此相关问题中有更多信息。

于 2018-05-01T14:40:23.487 回答