문제

필드 멤버 한 명 (예 : 문자열) 만있는 매우 간단한 클래스가 있습니다. 구현해도 괜찮습니까? hashCode() 단순히 돌아옵니다 fieldMember.hashCode()? 아니면 어떻게 든 필드의 해시 코드를 조작해야합니까? 또한 조작해야한다면 왜 그런가요?

도움이 되었습니까?

해결책

Fieldmember가 대상을 고유하게 식별하는 꽤 좋은 방법이라면 예라고 말할 것입니다.

다른 팁

조슈아 블로치 3 장.

곱하기, 추가 또는 xor-ing이 더 독특하게 만들지는 않습니다. 수학적으로, 당신은 단일 변수에 상수 함수를 적용 할 것이며, 이는 변수의 가능한 값의 수를 증가시키지 않습니다.

이러한 종류의 기술은 여러 해시 코드를 결합하고 여전히 충돌 위험을 상대적으로 작게 유지하는 데 유용합니다. 단일 해시 코드에는 아무런 영향을 미치지 않습니다.

예, 그것은 꽤 표준입니다. 클래스가 데이터베이스 행을 반영하면 기본 키를 반환합니다.

두 가지 실제 요구 사항 만 있습니다 hashCode: 하나, 그 equals 인스턴스에는 동일한 해시 코드가 있으며 두 개는 hashCode 합리적으로 빠르게 실행됩니다. 첫 번째 요구 사항은 실제로 가장 중요한 요구 사항입니다. 그것 없이는 컬렉션에 무언가를 넣을 수 있지만 거기에서 찾을 수는 없습니다. 두 번째는 단순히 성능 문제입니다.

해당 분야의 해시 코드 알고리즘이 위의 부분을 충족하는 경우 해당 클래스가 클래스에도 작동합니다. equals 또한 해당 필드가 있는지에 따라 다릅니다 equals.

'FieldEmber'변수가 이미 '해시 코드'함수를 구현하면 부모 클래스에서 직접 사용할 수 있습니다. 'Fieldmember'변수가 사용자 정의 클래스 인스턴스 인 경우 직접 올바르게 구현해야합니다. 읽다 java.lang.object '해시 코드'를 구현하기위한 지침으로 API 문서.

당신. 좋은 프로그래밍 연습입니다. 나는 보통 사용합니다 :

반환 var ^ 1;

일반적 으로이 객체를 *해시 맵 또는 *해시 세트의 요소의 키로 사용하지 않는 한 hashcode ()를 재정의 할 필요가 없습니다.

다른 사람이 언급했듯이 효과적인 Java의 조언을 따라야합니다. hashcode () 메소드를 무시하면 equals () 메소드를 재정의해야합니다. 또한 두 가지 방법은 일관성이 있어야합니다.

equals equals () 및 hashcode () 메소드 작성을 단순화하려면 사용합니다. EqualsBuilder 그리고 해시 코드 빌더 Apache Commons Lang에서

예는 다음과 같습니다.

public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (o == null || getClass() != o.getClass()) {
        return false;
    }
    User other = (User) o;
    return new EqualsBuilder()
            .append(this.getUniqueId(), other.getUniqueId())
            .isEquals();
}

public int hashCode() {
    return new HashCodeBuilder()
            .append(this.getUniqueId())
            .toHashCode();
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top