除了作为唯一整数之外,hashValue
在 swiftHashable
类型中选择 a 是否有任何性能考虑,可以插入到 a 中Set
?例如,我选择的整数值的大小会影响后备数组的大小吗?即,如果我将 a hashValue
of分配4000
给一个Hashable
类型并将其插入到 aSet
中,那么后备数组是否需要至少4000
是长度?
问问题
498 次
1 回答
5
hashValue
不必是唯一的。在绝大多数情况下,它不能是唯一的(任何大于 64 位的类型都必然具有比其散列更多的可能状态)。您不选择整数的大小。它将永远是Int
(这是机器字长)。
hashValue
但是,应该很快,理想情况下为 O(1)。它通常用于帮助优化相等检查(可能非常慢)。
最简单的实现hashValue
是:
var hashValue: Int { return 1 }
这是一个完全有效的哈希。它不是一个特别好的哈希,但它满足所有要求。计算速度很快,并且所有相等的对象都将具有相等的散列(这是一个要求;反过来不是必需的:相等的散列可能并不意味着相等的对象)。
于 2016-10-21T22:47:20.187 回答