swift协议Hashable中hashValue的性能考虑因素

时间:2016-10-21 22:35:05

标签: swift hashset hashable

除了作为一个唯一整数之外,选择hashValue类型中的Hashable是否可以插入Set?例如,我选择的整数值的大小会影响后备数组的大小吗?即如果我将hashValue 4000分配给Hashable类型并将其插入Set,则支持数组的长度必须至少为4000

1 个答案:

答案 0 :(得分:5)

hashValue不一定是唯一的。在绝大多数情况下,不能是唯一的(任何大于64位的类型都必然具有比其散列更多的可能状态)。您不选择整数的大小。它始终为Int(这是机器字大小)。

然而,

hashValue应该很快,理想情况下是O(1)。它通常用于帮助优化相等性检查(可能非常慢)。

hashValue最简单的实现是:

var hashValue: Int { return 1 }

这是一个非常有效的哈希。它不是特别好的哈希,但它满足所有要求。计算速度快,所有相等的对象都具有相等的哈希值(这是一个要求;反之则不是必需的:相等的哈希值可能并不意味着相等的对象)。