当前位置:  开发笔记 > 编程语言 > 正文

我可以确定给定字符串的内置哈希值始终相同吗?

如何解决《我可以确定给定字符串的内置哈希值始终相同吗?》经验,为你挑选了2个好方法。

我得到这样的字符串哈希:

string content = "a very long string";
int contentHash = content.GetHashCode();

然后我将哈希存储到字典中作为到另一个ID的键映射.这很有用所以我不必在默认字典哈希计算期间比较大字符串,但我可以通过键从字典中删除ID.

我可以确定给定字符串的哈希值("非常长的字符串")将始终相同吗?

我可以确定两个不同的字符串不会具有相同的哈希值吗?

另外,如果可能的话,为不同的字符串获取相同的哈希的可能性有多大?



1> Kent Boogaar..:

是的,它将是一致的,因为字符串是不可变的.但是,我认为你在滥用字典.您应该让字典使用字符串作为键来获取字符串的哈希值.哈希不保证是唯一的,因此您可以用另一个密钥覆盖一个密钥.



2> AnthonyWJone..:

只是添加一些细节,以了解更改哈希码的想法可能来自何处.

正如其他答案正确地说,特定字符串的哈希码对于特定的运行时版本将始终是相同的.由于性能原因,无法保证较新的运行时可能会使用不同的算法.

String类重写object中的默认GetHashCode实现.

.NET中引用类型的默认实现是分配一个顺序ID(由.NET内部保存)并将其分配给对象(对象堆存储具有用于存储此哈希码的槽,它仅在第一次调用GetHashCode时分配)对于那个对象).

因此,创建一个类的实例,为其分配一些值然后检索哈希码,然后使用相同的值集执行完全相同的序列将会产生不同的哈希码.这可能是导致一些人认为哈希码可以改变的原因.实际上,虽然它是一个类的实例,它被分配了一个哈希码,一旦分配了哈希码,那个实例就不会改变.

编辑:我刚刚注意到没有一个答案直接引用你们每个人的问题(尽管我认为答案很明确)但只是为了整理: -

我可以确定给定字符串的哈希值("非常长的字符串")将始终相同吗?

在您的使用中,是的.

我可以确定两个不同的字符串不会具有相同的哈希值吗?

不.两个不同的字符串可能具有相同的哈希值

另外,如果可能的话,为不同的字符串获取相同的哈希的可能性有多大?

概率非常低,因此从4G域中产生哈希是非常随机的.


您不会使用内置散列算法来进行散列密码,您可以使用像SHA-512这样的行业标准算法
推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有