2012-04-23 66 views
4

BigInteter太大而無法轉換爲整數。但是我必須在HashMap中存儲帶有ID(SHA 512)的對象,並且需要一個沒有多次衝突的散列函數。使用BigInteger覆蓋public int hashCode()

我試過了。但是,我不確定是否沒有集羣。

@Override 
public boolean equals(Object obj) { 
    if (this == obj) { 
     return true; 
    } 
    if (obj == null) { 
     return false; 
    } 
    if (getClass() != obj.getClass()) { 
     return false; 
    } 
    Advertisement other = (Advertisement) obj; 
    return this.getId().equals(other.getId()); 
} 

@Override 
public int hashCode() { 
    return new BigInteger(getId(), 16).hashCode(); 
} 

會轉換成整數(bi.intValue())更有效嗎?

回答

6

不要試圖重新發明輪子 - 只需使用getId().hashCode()

@Override 
public int hashCode() { 
    return getId().hashCode(); 
} 


String.hashCode()使用高效,高品質的散列算法,所以這是最好的選擇。它使你的代碼更簡單,這總是一件好事。

+0

thx我以爲是這樣 – headgrowe 2012-04-24 01:15:06

相關問題