为什么每次调用执行相同功能的函数({01234})时,哈希代码生成的方式都不同。值是37121646,那么当我再次运行时,它是45592480。
static void Main(string[] args)
{
int a;
Program pp = new Program();
a = pp.getHash();
}
private int getHash()
{
StringBuilder id = new StringBuilder();
for (int i = 0; i < 5; i++)
{
id.Append(i);
}
return id.GetHashCode();
}
Run Code Online (Sandbox Code Playgroud)
这是因为哈希码无意在对象的整个生命周期内进行更改。
如果考虑使用字典,这样做的原因应该很清楚。字典具有非常快的访问时间,因为对象是根据其哈希码放置在存储桶中的,因此当您想要获取值时,字典不需要搜索所有值,它会直接进入哈希码定义的存储桶。如果哈希码更改,则查找将失败。
因此,使用可变对象存在一个问题。哈希码不能依赖于值,因为如果这样做,则哈希码将在值出现时更改,并且哈希码不得更改。
因此,对于a StringBuilder,哈希码仅基于实例的引用。如果创建新实例,则将具有新的哈希码。它根本不是基于内容。
| 归档时间: |
|
| 查看次数: |
558 次 |
| 最近记录: |