>백엔드 개발 >C++ >`equals '를 재정의 할 때 왜'gethashcode '를 무시해야합니까?

`equals '를 재정의 할 때 왜'gethashcode '를 무시해야합니까?

Linda Hamilton
Linda Hamilton원래의
2025-02-02 15:16:10349검색

Why Must You Override `GetHashCode` When Overriding `Equals`?
일관된 객체 비교를 위해

재정의 및 를 재정의합니다 메소드를 재정의하여 클래스의 객체를 평등과 비교하는 방법을 재정의 할 때 GetHashCode 메소드를 무시하는 것이 필수적입니다. 이것은 객체가 사전 또는 해시 세트와 같은 해시 기반 컬렉션에서 키로 사용될 때 특히 중요합니다. 클래스 Equals : 를 고려하십시오 속성을 ​​기반으로 객체를 비교하기 위해

>를 사용자 정의하면 기본값 Equals (에서 상속)는 객체의 메모리 주소에 따라 여전히 해시 코드를 생성합니다. 이 불일치는 해시 테이블에서 GetHashCode 왜 일관된 해싱이 중요한가

Foo 재정의

는 다음과 같습니다
<code class="language-csharp">public override bool Equals(object obj)
{
    // ... comparison logic based on FooId ...
}</code>
일관성 해싱 :

객체의 해시 코드는 해시 테이블의 위치를 ​​결정합니다. 동일한 객체 Equals Foo 동일한 해시 코드를 가져야합니다. 해시 충돌 방지 : FooId 두 개 객체에 동일한 해시 코드 (충돌)가 있으면 해시 기반 컬렉션이 확인하기 위해 GetHashCode를 호출하지 않고 동일하다고 잘못 가정 할 수 있습니다. 잘 구현 된 Object는 충돌을 최소화하여 Foo가 진정한 평등을 결정하는 데 사용됩니다.

효과적으로 구현

구현은

메소드의 논리와 정렬되어야합니다 : GetHashCode 동일한 객체에는 동일한 해시 코드가 있어야합니다 동일한 해시 코드는 평등을 보장하지는 않지만 결정적인 비교를 위해

메소드를 트리거합니다.
  • 클래스의 경우, 적절한 재정의는 다음과 같습니다 이것은 에 따라 해시 코드를 생성하고, 평등 체크인 . 향상된 선명도를 위해 사용자 정의 비교를 사용하는 > 및 를 재정의 할 때, 개선 된 코드 가독성 및 유지 관리 가능성을 위해 사용자 정의 평등 연산자 ( 및 )를 추가하는 것을 고려하십시오.

위 내용은 `equals '를 재정의 할 때 왜'gethashcode '를 무시해야합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.