我有一個自定義對象需要鍵入表的問題。我需要生成一個唯一的數字鍵。我遇到碰撞問題,我想知道我是否可以利用字典來幫助我。假設我有這樣一個對象:.NET字典如何解決衝突?
class Thingy
{
public string Foo;
public string Bar;
public string Others;
}
等等更多領域。假設Foo和Bar是我的關鍵字段 - 如果它們在兩個Thingys之間相等,那麼這兩個對象應該被認爲是相等的(一個可能代表另一個的更新,其他字段被更新。)所以我有這些:
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
}
所以這個工作的大部分,但有兩個實際上不同的兩個Thingys具有相同的哈希碼的罕見場合。
我的問題是這樣的:我可以使用字典<Thingy, int
>在哪裏放入我的Thingys,並使用字典中出現的順序值作爲我的實際密鑰?我在想,如果字典在檢測到罕見的哈希碼衝突時會調用我的Equals方法,確定這些對象實際上是不同的,並以不同的方式存儲它們。然後,當我查看圖像時,它會看到該散列的存儲桶並搜索正確的Thingy,再次使用Equals進行比較。
這是字典的情況,還是它只解決散列碼不同的衝突,但(散列%大小)是相同的?如果這不起作用,可能會發生什麼?
很好的方式來說明這一點。 – itowlson