会成功吗?
理论上是,实际上不是(见下文)。
或者它会在执行期间的某个时候抛出“密钥已存在”异常?
嗯,是的,它会抛出,但不是因为你有一个键碰撞。它会抛出,因为你的内存不足。有 2^64 个ulongs,每个占用 8 个字节,所以所有的ulongs 都消耗
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进行比较,如果找到则返回,否则返回。ulongxx.GetHashCode ulongxulongtruexfalse