3

除了作为唯一整数之外,hashValue在 swiftHashable类型中选择 a 是否有任何性能考虑,可以插入到 a 中Set?例如,我选择的整数值的大小会影响后备数组的大小吗?即,如果我将 a hashValueof分配4000给一个Hashable类型并将其插入到 aSet中,那么后备数组是否需要至少4000是长度?

4

1 回答 1

5

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

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

最简单的实现hashValue是:

var hashValue: Int { return 1 }

这是一个完全有效的哈希。它不是一个特别好的哈希,但它满足所有要求。计算速度很快,并且所有相等的对象都将具有相等的散列(这是一个要求;反过来不是必需的:相等的散列可能并不意味着相等的对象)。

于 2016-10-21T22:47:20.187 回答