到目前为止我收集的是哈希码是整数,可以帮助更快地从数组中查找数据。看看这段代码:
string x = "Run the program to find this string's hash code!";
int hashCode = x.GetHashCode();
for(int i = 0; i<100; i++)
{
// the hash code that is printed is always different
Console.WriteLine("Hash Code is: {0}", hashCode);
Console.ReadKey();
我的问题是:为什么每次迭代循环时它都会给我一个不同的哈希代码?为什么即使字符串没有改变,x的哈希代码也会不断变化?
答案 0 :(得分:4)
在整个程序执行的生命周期中,哈希代码对于给定对象保持相同非常重要。不应该依赖给定对象的哈希码来保持程序的多次执行中的,这就是你正在做的事情。许多实现将在不同的程序调用中保持相同,但.NET string
实现不会。
答案 1 :(得分:0)
到目前为止我收集的是哈希码是整数,有助于更快地从数组中查找数据
不,它们有助于更快地在基于哈希的集合中查找数据。数组只是一系列项目;在普通数组中不依赖于哈希码或从中获益。
究竟什么是哈希代码
它是一个32位整数,用于插入和标识基于散列的集合中的对象,如Hashtable
或Dictionary
它们是如何生成的(如有必要)?
所有对象都没有一种算法用于生成哈希码。唯一的限制是:1)两个“相等”对象必须生成相同的哈希码,2)对象的哈希码在该对象的生命周期内不得更改 。 没有限制,不同程序中的两个“相等”对象 会返回相同的哈希码。
默认实现使用内存中对象的位置。诸如string
之类的类将“相等”定义为“对内存中相同对象的引用”之外的其他类,会覆盖此默认行为以遵守上面的规则1。
如果你想要一个可以持久化的哈希码,并且每次要求它都保证相同,那么使用标准的哈希算法,如SHA1或MD5。