equalsλ₯Ό μ¬μ μν ν΄λμ€λ hashCodeλ μ¬μ μν΄μΌ νλ€. λ§μ½ hashCodeλ₯Ό μ¬μ μνμ§ μλλ€λ©΄, μΌλ° κ·μ½μ μ΄κΈ°κ² λμ΄ HashSetμ΄λ HashMapκ³Ό κ°μ 컬λ μ
μ μμλ‘ μ¬μ©μ λ¬Έμ λ₯Ό μΌμΌν¬ μ μλ€.
equals λΉκ΅μ μ¬μ©λλ μ λ³΄κ° λ³κ²½λμ§ μμλ€λ©΄, μ ν리μΌμ΄μ
μ΄ μ€νλλ λμ κ·Έ κ°μ²΄μ hashCode λ©μλλ λͺλ²μ νΈμΆν΄λ μΌκ΄λκ² νμ κ°μ κ°μ λ°νν΄μΌνλ€.
equals(Object) κ° λ κ°μ²΄λ₯Ό κ°λ€κ³ νλ¨νλ€λ©΄, λ κ°μ²΄μ hashCodeλ λκ°μ κ°μ λ°ν ν΄μΌνλ€.
equals(Object)κ° λ κ°μ²΄λ₯Ό λ€λ₯΄λ€κ³ νλ¨νλλΌλ, λ κ°μ²΄μ hashCodeκ° μλ‘ λ€λ₯Έ κ°μ λ°νν νμλ μμΌλ©°, νμ§λ§ λ€λ₯Έ κ°μ²΄μ λν΄μλ λ€λ₯Έ κ°μ λ°νν΄μΌ ν΄μν
μ΄λΈμ μ±λ₯μ΄ μ’μμ§λ€ . λ§μ½ λͺ¨λ κ°μ²΄μ hashCodeκ° λμΌν κ°μ λ°ννλ€λ©΄, νκ· μνμκ°μ΄ O(1)μμ O(n)μΌλ‘ λλ €μ Έ, κ°μ²΄κ° λ§μμ§λ©΄ μΈ μ μκ² λλ€.
λ
Όλ¦¬μ μΌλ‘ κ°μ κ°μ²΄λ κ°μ ν΄μ¬μ½λλ₯Ό λ°ν ν΄μΌνλ©°, hashCode μ¬μ μλ₯Ό μλͺ»νμ λ κ°μ₯ ν¬κ² λ¬Έμ κ° λλ λΆλΆμ΄λ€.
Copy public final class PhoneNumber {
private final short areaCode , prefix , lineNum ;
public PhoneNumber ( short areaCode , short prefix , short lineNum ){
this . areaCode = rangeCheck ( areaCode , 999 , " μ§μμ½λ " );
this . prefix = rangeCheck ( prefix , 999 , " ν리ν½μ€ " );
this . lineNum = rangeCheck ( lineNum , 9999 , " κ°μ
μλ²νΈ " );
}
private static short rangeCheck ( int val , int max , String arg ){
if ( val < 0 || val > max ){
throw new IllegalArgumentException ( arg + " : " + val );
}
return ( short ) val ;
}
@ Override
public boolean equals ( Object o ){
if ( o == this )
return true ;
if ( ! ( o instanceof PhoneNumber )){
return false ;
}
PhoneNumber pn = ( PhoneNumber ) o ;
return pn . lineNum == lineNum && pn . prefix == prefix && pn . areaCode == areaCode ;
}
} μ¬κΈ°μ PhoneNumber ν΄λμ€λ hashCodeλ₯Ό μ¬μ μνμ§ μμ, λ
Όλ¦¬μ λμΉμΈ λ κ°μ²΄κ° μλ‘ λ€λ₯Έ ν΄μμ½λλ₯Ό λ°ννμ¬ λ λ²μ§Έ κ·μ½μ μ§ν€μ§ λͺ»νκ²λλ€.
μμ hashCodeλ μ’μ hashCodeλ₯Ό μμ±νλ κ°μ₯ κ°λ¨ν μλ Ήμ΄λ€. μ¬κΈ°μλ κΈ°λ³Έ νμ
νλμ΄κΈ° λλ¬Έμ Type.hashCode(f)λ₯Ό μννμ§λ§, λ§μ½ μ°Έμ‘° νμ
νλμ΄λ©΄μ, μ΄ ν΄λμμ equals λ©μλκ° ν΄λΉνλμ equalsλ₯Ό μ¬κ·μ μΌλ‘ νΈμΆν΄ λΉκ΅νλ€λ©΄, ν΄λΉ νλμ hashCodeλ₯Ό μ¬κ·μ μΌλ‘ νΈμΆνλ©΄λλ€. λ§μ½ νλμ κ°μ΄ nullμΈ κ²½μ° 0μ μ¬μ©νλ©΄ λλ€.
νλκ° λ°°μ΄μ΄λΌλ©΄, ν΅μ¬ μμ κ°κ°μ λ³λμ νλμ²λΌ λ€λ£¨κ³ , λ°°μ΄μ ν΅μ¬ μμκ° μλ€λ©΄ λ¨μν μμ(0)λ₯Ό μ¬μ©νλ€. λ§μ½ λͺ¨λ μμκ° ν΅μ¬ μμλΌλ©΄ Arrays.hashCodeλ₯Ό μ¬μ©νλ©΄ λλ€.
μμ κ°μ΄ hashCodeλ₯Ό μμ±ν ν
μ€νΈ μ½λλ₯Ό μννλ©΄ λμΉμΈ μΈμ€ν΄μ€μ λν΄ λκ°μ ν΄μμ½λλ₯Ό λ°ννλ κ²μ λ³Ό μ μλ€. νμνλ(λ€λ₯Έ νλλ‘λΆν° κ³μ°ν΄ λΌ μ μλ νλ)λ λͺ¨λ 무μν΄λ λλ©°, equals λΉκ΅μ μ¬μ©λμ§ μμ νλλ λ°λμ μ μΈ ν΄μΌ νλ€.
λ§μ½ ν΄μ μΆ©λμ΄ λμ± μ μ λ°©λ²μ κΌ μ¨μΌνλ€λ©΄, ꡬμλ°μ com.google.common.hash.Hashingarrow-up-right μ μ°Έκ³ νλ κ²μ΄ μ’λ€.
ν΄λμ€κ° λΆλ³μ΄κ³ ν΄μμ½λλ₯Ό κ³μ°νλ λΉμ©μ΄ ν¬λ€λ©΄, λ§€λ² μλ‘ κ³μ°νκΈ° 보λ€λ μΊμ±νλ λ°©μμ κ³ λ €νλ κ²μ΄ μ’λ€.
ν΄μμ ν€λ‘ μ¬μ©λμ§ μλ κ²½μ°λΌλ©΄ λ€μκ³Ό κ°μ΄ hashCodeκ° μ²μ νΈμΆλ λ κ³μ°νλ μ§μ° μ΄κΈ°ν μ λ΅λ μλ€. μ΄λ μ€λ λ μμ μ±κΉμ§ κ³ λ €ν΄μΌνλ©°, μ±λ₯μ λμ΄κ³ μ ν΄μμ½λ κ³μ°μ ν΅μ¬ νλλ₯Ό μλ΅ν΄μλ μλλ€.
hashCodeκ° λ°ννλ κ°μ μμ± κ·μΉμ API μ¬μ©μμκ² μμΈν 곡ννμ§ μμμΌ ν΄λΌμ΄μΈνΈκ° μ΄ κ°μ μμ§νμ§ μκ²λκ³ , μΆνμ κ³μ° λ°©μμ λ°κΏ μ μλ€.