java 강의에서 == 연산자에 대해, 이 글에서 언급을 했었습니다. 그런데, 질문을 받고 답변을 하다 보니, 헷갈리는 점이 있었습니다. 객체에서 다른 객체를 참조하는데 a == b인 경우가 있을까? 사실, 이에 대한 답은 문서에 있습니다. Object 클래스에 있는 equals 메서드에 나와 있는데요. 다른 부분은 없고, 초록색 부분과 노란색 부분만 읽어보시면 됩니다. x와 y가 같은 오브젝트를 참조한다를 명제 Q, Object 클래스의 equals 메소드가 true를 리턴한다를 명제 P라 합시다. if and only if는 필요 충분 조건을 나타냅니다. 즉, 저 메소드가 참 값을 리턴했다는 것은, x와 y가 같은 객체를 참조했다는 것입니다. 이런 경우에만 참이 된다는 소리입니다. x == y인데 다..
HashSet 검색 결과
안녕하세요. chogahui05입니다. 자바의 해시맵은 hashCode를 기반으로 버킷의 어디에 들어갈지를 계산합니다. 그런데, putVal을 자세히 보셨다면 아시겠지만, hash function의 리턴값을 인자로 넣는 것을 알 수 있습니다. 이것은 어떻게 된 일일까요? java8에서 모 자료구조 코드를 조금씩 뜯어봅시다. get 메서드를 보시면, getNode를 호출합니다. 그리고, 이 메서드는 hash(key)를 인자로 삼습니다. 이것은 put도 마찬가지입니다. 내부적으로 putVal을 호출하고, 이것 역시 hash(key)를 호출합니다. 내부를 보시면, key.hashCode 값을 h에 넣습니다. 여기서, 해시코드는, 오버라이딩이 된 hashCode 값입니다. 그리고 이것과 다른 값을 비트 xor을..
java의 hashset은 어떻게 동작할까요? hashmap과 다른 점은 map은 Key로부터 Value를 뽑아올 수 있지만, set은 Key값만을 중요하게 여긴다는 것입니다. 그런데, 뭔가 이상하지 않나요? HashMap하고, Set은 그것 말고는 거의 동일한 기능을 수행합니다. 상식적으로 생각해 보았을 때, HashSet 기능들을 일일히 다 구현을 하는 게 효율적일까요? 아니면 이미 구현된 HashMap의 기능을 이용하는 게 효율적일까요? 후자일 겁니다. 이 정도만 이해하셨다면, 이 글의 90%를 이해하신 겁니다. 나머지 10%는 밑에서 후술하도록 하겠습니다. 예제 프로그램을 보겠습니다. 간단하게 HashSet hs를 선언했습니다. 이것은 Integer를 Key로 가지는 자료 구조입니다. 안에 필드를..
저번에, 왜 equals를 구현하면 왜 hashCode를 같이 구현해야 하는지에 대해서 설명을 했습니다. hash 계열의 자료구조 때문에 그렇다고 했었습니다. 그렇지 않으면 어떻게 동작하는지는 여기를 참고하시면 좋겠습니다. 이 내용에 대해서 숙지하셨다고 가정하고 진행하도록 하겠습니다. 면접 질문에서 간혹 가다가 등장하는지는 잘 모르겠습니다만, 어떠한 객체의 hashCode 값이 같은 것들을 모두 hashSet에 넣을 때, 어떤 일이 벌어지는지는 꽤 중요한 문제 중 하나일 겁니다. 사실, 우리는 그렇게 바보같이 구현할 일이 없습니다. 그렇지만, 저는 이에 대해서 포스팅 하도록 하겠습니다. 먼저 Java 8에서부터, hashMap은 버킷에 8개 이상 달려있을 때, Balanced Tree로 변환이 된다는 것..
최근댓글