java) hashCode()는 자동으로 호출되는건가요?

조회수 421회

hashCode(), equals()를 사용할일이 생겼는데..

HashMap 에서는 이 두 함수를 모두 저장할때 자동 호출하나요?

그리고 이 프레임워크를 제외하고는 모두 객체의 동등비교를 할때

두 함수 모두 직접호출해서 사용해야하는건가요?

2 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    네 hashmap의 구현 방식이 "hasCode()"의 코드 값을 가지고 indexing을 하는 방식입니다. 또한 hashing 자체가 다른 객체이지만 같은 haseCode를 리턴할 수 있기 때문에 마지막으로 같은 객체인지 확인하기 위해서 "equals()"를 콜하게 됩니다.

    그리고 두 함수를 모두 호출해야만 동등비교를 할 수 있는거는 아니입니다. 그냥 동등한지 확인하기 위해서는 "equals()"함수만 콜하면 되지만 "equals"를 어떻게 구현했냐에 따라서 다릅니다. 만약 "equals"함수를 오버라이딩 하지 않았다면 같은 참조 객체일때만 true를 리턴합니다. 진짜 동등객체인지 확인하려는 class가 무엇이냐에 따라 다르겠지요. 만약 질문자께서 만든 class를 동등한지 확인하고 싶으시고 참조 객체가 같은지가 아니라 실 데이터가 같은지 확인하고 싶으시면 "equals"함수를 오버라이딩 하셔야합니다.

    그리고 그 만드신 class를 가지고 hashmap을 이용하시려면 hasecode()함수 또한 오버라이딩하셔야 합니다. 어떻게 오버라이딩 하는지 모르시겠으면 검색해보시면 다른 분들이 자세하게 적으놓으신 블로그 들이 있으니 참조하시면 되겠습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • 아 감사합니다! 해쉬맵은 자동호출되는거고 이외의 일반 객체끼리에서는 제가 직접 호출해야하는거군요..

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)