如果我想创建Dictionary<Key:Value>()
,Key
类型对象需要协议Hashable
。为什么会这样,字典是如何实现的?
我的意思是我理解,如果Key
只需要符合Equatable
类型的协议,因为程序必须搜索相关值,但是,额外的{{1}与var hashValue: Int
一起出现的内容有点令人困惑
答案 0 :(得分:1)
Hashable键使字典插入和查找更有效,尤其是对于大型字典。
如果密钥不可用,为了找到一个特定的密钥,你必须(在最坏的情况下)读取并比较字典中所有密钥的相等性。
Hashable密钥通过哈希值自然地划分为桶,并且为了找到特定的密钥,您可以计算其哈希以确定它所在的桶,那么您只需要比较属于它的相等密钥桶。如果正确选择了散列函数并且字典中的元素数量小于最大Int
值,则每个存储桶只有一个密钥,因此使查找与O一样高效( 1)。
this related question中有更多信息。