테이블에 키를 입력해야하는 사용자 지정 개체에 문제가 있습니다. 고유 한 숫자 키를 생성해야합니다. 나는 충돌 문제를 겪고 있으며 사전을 활용하여 나를 도울 수 있는지 궁금합니다. 다음과 같은 객체가 있다고 가정 해 보겠습니다..NET 사전이 충돌을 얼마나 잘 해결합니까?
class Thingy
{
public string Foo;
public string Bar;
public string Others;
}
등으로 더 많은 필드가 있다고 가정합니다. Foo와 Bar는 필자의 주요 필드라고 할 수 있습니다. 두 Thingys가 같으면 두 객체를 동일하게 간주해야합니다 (하나는 다른 필드로 업데이트 될 수 있고 Others 필드는 업데이트됩니다). 그래서 다음과 같습니다 :
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가 동일한 해시 코드를 갖는 경우는 거의 없습니다.
내 질문은 : 내가 Thingys에 넣은 사전 <Thingy, int
을 사용할 수 있으며 순차적 값을 사전에서 실제 키로 사용합니까? 드문 해시 코드 충돌을 감지 할 때 Dictionary가 My Equals 메서드를 호출하고 개체가 실제로 다르다는 것을 확인한 다음 다르게 저장하는지 궁금합니다. 나는 영상을 보았을 때 그 해시를위한 양동이를 보았고 정확한 Thingy를 검색했다. 다시 Equals를 사용하여 비교했다.
사전의 경우입니까, 아니면 해시 코드가 다른 충돌 만 해결할 수 있습니까 (해시 % 크기)? 이 방법이 효과가 없다면 어떻게 될까요?
포인트를 설명하는 좋은 방법입니다. – itowlson