会成功吗?
理论上是,实际上不是(见下文)。
或者它会在执行期间的某个时候抛出“密钥已存在”异常?
嗯,是的,它会抛出,但不是因为你有一个键碰撞。它会抛出,因为你的内存不足。有 2^64 个ulong
s,每个占用 8 个字节,所以所有的ulong
s 都消耗
8 * 2^64 = 2^67 = (2^10)^6.7 ~= (10^3)^(6.7) = 10^20 字节 ~= 100 艾字节。
哎呀!
所以我说“理论上是的”,因为你不会发生密钥冲突;也就是说,仅仅因为密钥是 64 位ulong
但哈希码是 32 位并不意味着您将发生密钥冲突。您将有哈希码冲突,但不会有键冲突。
键是ulong
。该实现Dictionary<ulong, object>
用于Object.GetHashCode
快速测试Dictionary<ulong, object>
. 给定 a ulong x
,如果x.GetHashCode
不等于字典中保存的一些哈希码,它可以很快推断出它不在字典中。另一方面,如果等于字典中保存的某个哈希码,它可以非常快速地与字典中具有相同哈希码的所有s进行比较,如果找到则返回,否则返回。ulong
x
x.GetHashCode
ulong
x
ulong
true
x
false