Item 11. hashCode
equalsλ₯Ό μ¬μ μνλ €κ±°λ hashCodeλ μ¬μ μνλΌ
μμ΄ν 10μμ equalsλ₯Ό μ¬μ μν λ hashCodeλ μ¬μ μν΄μΌ νλ€κ³ μΈκΈνλ€. Object λͺ μΈμλ μλμ κ°μ΄ μ μλμ΄ μλ€.
equals λΉκ΅μ μ¬μ©λλ μ λ³΄κ° λ³κ²½λμ§ μμΌλ©΄, hashCode λ°ν κ°λ νμ κ°μμΌ ν¨(μΌκ΄μ±)
equalsκ° λ κ°μ²΄λ₯Ό κ°λ€κ³ νλ¨νλ©΄, λ κ°μ²΄μ hashCodeλ κ°μ κ°μ λ°νν΄μΌ ν¨
equalsκ° λ κ°μ²΄λ₯Ό λ€λ₯΄λ€κ³ νλ¨ν΄λ, λ κ°μ²΄μ hashCodeκ° μλ‘ λ€λ₯Έ κ°μ λ°νν νμλ μμ(λ¨, λ€λ₯Έ κ°μ²΄μ λν΄μλ λ€λ₯Έ κ°μ λ°νν΄μΌ μ±λ₯μ΄ μ’μμ§)
μ¬μ μλ₯Ό μ¬λ°λ₯΄κ² νμ§ μμΌλ©΄ HashMap / HashSet κ°μ Hash κΈ°λ° μ»¬λ μ μμ μ λλ‘ λμνμ§ μκ² λλ€.
hashCode μ¬μ μ λ°©λ²
μ’μ hashCodeλ₯Ό μμ±νλ λ°©λ²μ μλμ κ°λ€. μ°μ μ£Όμν΄μΌν λΆλΆμ equalsμμ μ¬μ©νλ νλλ€κ³Ό λμΌν νλλ€μ μ¬μ©ν΄μΌ νλ€λ κ²μ΄λ€.
int λ³μ resultλ₯Ό μ μΈν ν κ° cλ‘ μ΄κΈ°ν
ν΄λΉ κ°μ²΄μ κ° ν΅μ¬ νλμ λν΄ μλμ κ°μ΄ μννμ¬ ν΄μμ½λ cλ₯Ό κ³μ°
κΈ°λ³Έ νμ : Type.hashCode(f) μν
μ°Έμ‘° νμ : μ¬κ·μ μΌλ‘ hashCodeλ₯Ό νΈμΆνλ©°, μλμ κ°μ κ·μΉμΌλ‘ κ³μ°
null: 0
λ°°μ΄: Arrays.hashCodeλ₯Ό μ¬μ©
ν΅μ¬ νλ: ν΅μ¬ νλμ hashCodeλ₯Ό μ¬μ©
νλκ° ν΅μ¬μ΄ μλλ©΄, ν΄λΉ νλμ hashCodeλ₯Ό κ³μ°νμ§ μμ
κ³μ°λ ν΄μμ½λ cλ₯Ό resultμ λν¨(
result = 31 * result + c
)
Objects ν΄λμ€μλ μμμ κ°μλ§νΌ κ°μ²΄λ₯Ό λ°μ ν΄μμ½λλ₯Ό κ³μ°ν΄μ£Όλ μ μ λ©μλμΈ hashκ° μλ€. μμ μꡬμ¬νμ μΆ©μ‘±νμ¬ μ ꡬνλμ΄ μμΌλ―λ‘, μ΄ λ©μλλ₯Ό μ¬μ©νλ κ²μ΄ κ°μ₯ μ’μ§λ§ μλκ° λ리기 λλ¬Έμ μ±λ₯μ΄ μ€μν μν©μμλ μ§μ ꡬννλ κ²μ΄ μ’λ€.
κ³±μ
μ 31μ μ¬μ©νλ μ΄μ
νμμ΄λ©΄μ μμμ΄κΈ° λλ¬ΈμΈλ°, μ¬μ€ μμλ₯Ό μ°λ μ΄μ λ λͺ ννμ§ μκ³ μ ν΅μ μΌλ‘ μ¬μ©νλ κ°μ΄λΌκ³ νλ€. νμ§λ§ μ§μλ₯Ό μ¬μ©νλ©΄μ μ€λ²νλ‘μ°κ° λ°μνλ©΄ μ 보λ₯Ό μμ μ μκΈ° λλ¬Έμ μ§μ κ°μ μ¬μ©νλ κ²μ μ’μ§ μλ€.
μΊμ±
μμμλ μΈκΈνλ―μ΄ ν΄μμ½λλ₯Ό κ³μ°νλ κ³Όμ μ λΉμ©μ΄ λ§μ΄ λ€ μ μλ μμ μ΄κΈ° λλ¬Έμ νλμ κ°μ μΊμ±νλ λ°©λ²μ΄ μλ€. νμ§λ§ μ΄ λ°©λ²μ νλκ° λ³κ²½λλ©΄ ν΄μμ½λλ₯Ό λ€μ κ³μ°ν΄μΌ νλ―λ‘, λΆλ³ νλμλ§ μ¬μ©νλ κ²μ΄ μ’λ€.
Last updated