除了作为一个唯一整数之外,选择hashValue
类型中的Hashable
是否可以插入Set
?例如,我选择的整数值的大小会影响后备数组的大小吗?即如果我将hashValue
4000
分配给Hashable
类型并将其插入Set
,则支持数组的长度必须至少为4000
?
答案 0 :(得分:5)
hashValue
不一定是唯一的。在绝大多数情况下,不能是唯一的(任何大于64位的类型都必然具有比其散列更多的可能状态)。您不选择整数的大小。它始终为Int
(这是机器字大小)。
hashValue
应该很快,理想情况下是O(1)。它通常用于帮助优化相等性检查(可能非常慢)。
hashValue
最简单的实现是:
var hashValue: Int { return 1 }
这是一个非常有效的哈希。它不是特别好的哈希,但它满足所有要求。计算速度快,所有相等的对象都具有相等的哈希值(这是一个要求;反之则不是必需的:相等的哈希值可能并不意味着相等的对象)。