hash Code 에 대해 서 꼭 알 아야 할 세 가지.

5852 단어 자바equalsHashCode
자바 에서 hashCode () 와 equals () 가 지 켜 야 할 규범:
Objects that are equal must have the same hash code 
within a running process

    ,  equals          hash code

역명 제: 같은 hash code 의 대상 이 같 습 니 다 (equals).
규범 을 따 르 는 상황 에서 원명 제 는 진실 이 고 역부 명제 만 진실 이다.
또한 이론 적 으로 큰 확률 이 있 습 니 다. 서로 다른 대상 은 같은 hashcode 가 있 습 니 다. 대상 의 hashCode () 방법 은 int 를 되 돌려 주 고 최대 2 ^ 32 에서 hashcode 가 있 으 며 64 비트 가상 컴퓨터 에 서 는 이론 적 으로 대상 이 2 ^ 64 개 (인용 이 소 진 될 때 까지) 가 존재 할 수 있 기 때문에 대상 과 hashCode 사이 에 일대일 관계 가 존재 할 수 없습니다.
Whenever two different objects have the same hash code, 
we call this a collision.

             hashcode ,       。

A collision is nothing critical, it just means that there 
is more than one object in a single bucket, so a HashMap 
lookup has to look again to find the right object. A lot of
collisions will degrade the performance of a system, but 
they won’t lead to incorrect results.

          ,      HashMap            , 
             。             (   
linkedlist),         。

But if you mistake the hash code for a unique handle to an 
object, e.g use it as a key in a Map, then you will 
sometimes get the wrong object. Because even though 
collisions are rare, they are inevitable. For example, the 
Strings "Aa" and "BB" produce the same hashCode: 2112. 

         hascode     key  ,     ,      
            hashcode。             。
HashCodes can change hashcode    

   ,      ,  hashCode             ,    
       ,hashCode      ;

    ,  javadoc,hashCode                  
  。            。


Whenever it is invoked on the same object more than once 
during an execution of a Java application, the hashCode 
method must consistently return the same integer, provided 
no information used in equals comparisons on the object is 
modified. This integer need not remain consistent from one 
execution of an application to another execution of the 
same application.

그래서:
  • equals 를 구현 할 때마다 hashCode 를 구현 해 야 합 니 다. equals 방법 을 구현 할 때 hashCode 방법 도 구현 해 야 합 니 다.
  • Never misuse hashCode as a key. hashCode 를 key 로 만 들 지 마 세 요.
  • Do not use hashCode in distributed applications 분포 식 응용 프로그램 에서 hashCode 에 의존 하지 마 십시오.
  • 또 다른 대체 품 SHA 1
    You may know that cryptographic hash codes such as SHA1 are
    sometimes used to identify objects (Git does this, for 
    which makes collisions virtually impossible. Even with a 
    gigantic number of objects, the odds of a collision in this 
    space are far below the odds of a meteor crashing the 
    computer that runs your program. 
    
                  ,  SHA1,       id,git    
      。      ?        ,SHA1   160  ,      
       。             objects,             
           

    원문:http://eclipsesource.com/blogs/2012/09/04/the-3-things-you-should-know-about-hashcode/

    좋은 웹페이지 즐겨찾기