[英]Is GetHashCode strong enough or do I need another hash function?
我正在实现数据序列化,但遇到了问题。 我有:
我有一个想法将所有内容转换为字节数组(长度 8)或整数数组(长度 2)并获取 C# GetHashCode 方法
GetHashCode 是否足够强大以用作此数据的标识符? 或者有人有更好的主意,也许?
EOG
GetHashCode 并非旨在创建唯一标识符 - 它的主要用途是为散列数据结构(如 HashTable)中的存储桶分配值 - 请参阅http://ericlippert.com/2011/02/28/guidelines-and-rules- for-gethashcode/ . 当我需要一个 object 的唯一标识符,并且由于某种原因 object 本身不提供唯一标识符时,我通常只使用 GUID。 它们在 C# 中生成是微不足道的,并且保证在 scope 中是唯一的,无论您在做什么。
GetHashCode 纯粹用于字典中的散列。 由于可能发生 hash 冲突,您不应在任何地方使用它作为标识符。 它返回 Int32,例如,对于 String,它显然可能有超过 2,147,483,647 个唯一字符串。 两个不同的字符串可以具有相同的 hash 代码。 话虽如此,您有两种选择:
1)如果您需要从实际值中派生标识符。 例如,如果您需要快速判断是否已经有新的 Object 持久化,而无需反序列化所有对象并将它们与有问题的 object 进行比较。 例如,您可以在 SHA1 上使用ComputeHash 。
ints 和 longs (< int.MaxValue) 的GetHashCode()
值与该值相同,但对于数组,该值不稳定。 所以不要使用它。
为什么不将整个结构转换为long
使用它呢?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.