首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.NET字典解决冲突的能力如何?

.NET字典解决冲突的能力如何?
EN

Stack Overflow用户
提问于 2010-02-11 04:48:07
回答 2查看 3.8K关注 0票数 16

我有一个自定义对象的问题,它需要为一个表设置键值。我需要生成一个唯一的数字密钥。我有碰撞问题,我想知道我是否可以利用字典来帮助我。假设我有一个这样的对象:

代码语言:javascript
复制
class Thingy
{
    public string Foo;
    public string Bar;
    public string Others;
}

更多的字段,依此类推。假设Foo和Bar是我的关键字段-如果它们在两个事物之间相等,那么这两个对象就应该被认为是相等的(一个可能代表对另一个的更新,而其他字段则被更新)。所以我有这些:

代码语言:javascript
复制
public override bool Equals(object obj)
{
    Thingy thing = (Thingy)obj; // yes I do type check first
    return (this.Foo == thing.Foo && this.Bar == thing.Bar);
}

public override int GetHashCode()
{
    return (this.Foo + this.Bar).GetHashCode(); // using default string impl
}

因此,这在很大程度上是有效的,但很少有两个实际上不同的东西具有相同的哈希码的情况。

我的问题是:我是否可以使用字典<Thingy, int>放在我的东西中,并使用字典中的序列值作为实际的键?我想知道,当检测到罕见的散列代码冲突时,Dictionary是否会调用我的Equals方法,确定对象实际上是不同的,并以不同的方式存储它们。我想象一下,当查找它时,它会看到一个存储该散列的桶,并搜索正确的Thingy,再次使用Equals进行比较。

这是字典的情况,还是它只解决散列代码不同,但(散列%大小)相同的冲突?如果这不起作用,还有什么可能呢?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2240231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档