2011-11-16 137 views
4

下面是示例生成的hashCodeIntelliJ IDEA如何生成哈希碼?

@Override 
    public int hashCode() { 
     int result; 
     long temp; 
     temp = x != +0.0d ? Double.doubleToLongBits(x) : 0L; 
     result = (int) (temp^(temp >>> 32)); 
     temp = y != +0.0d ? Double.doubleToLongBits(y) : 0L; 
     result = 31 * result + (int) (temp^(temp >>> 32)); 
     return result; 
    } 

不知什麼有31 *和32 >>>

回答

5

對於>>> 32:長和雙64位作爲int是32位,所以爲了得到一個int結果,一旦32的轉換必須發生以保持信息。

31的乘法是一種典型的技術。 31是一個素數,2^32內的重複乘法將遍歷所有的值。所以哈希算法非常棒。 (一般)