2012-09-10 81 views
1

我有一個要求,我有一組事先不知道的字符串(例如「phy」,「link」,「maca」)Java:字符串到7位哈希

我有2個程序在那裏我只有7位發送來溝通字符串。

如果我事先知道這些字符串,我可以說「phy」= 1「link」= 2等等,但是我想自動執行此操作,在這兩個程序中我都有兩個函數用一些編碼方式。

private int getHash(String agent) {   
     return 0; 
    } 
    private String getAgentIDfromHash(int hash) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

所以int將是一個7位int。我可以嘗試對字符串中的所有字符進行異或運算,但我想知道是否有更好的方法來實現它? 有什麼想法?

回答

1

標準字符串hashCode函數被設計爲分佈良好。

所以你可以簡單地從agent.hashCode()(你想要的,但最好是低位)中取7位。

請注意,無論您做什麼,您都不能有7位的非常低的衝突概率。 2⁷僅爲128.您應該可以找到字符串集的一個屬性,以實現更好的解決方案。

+0

任何7位將分佈良好? – rinku

+0

低位當然更好,但我記得讀過研究報告說它對任何一組字節都沒有那麼壞。請注意,這是一個合理的命題,不是最好的命題,hashCode有時會受到批評。 –

+0

如果我使用「phy」.hashCode()&0x7f ..爲字符串集我知道我得到不同的值..我的字符串不會超過5-6個字符 – rinku

1

有了這麼少的位數,你必須格外小心不要發生碰撞。最低限度將是程序首先在內部檢查他們是否與他們自己的(已知)部分名稱產生衝突。

理想情況是兩個程序都知道整個鍵集,以便它們可以產生7位ID到名稱的映射,並且映射在兩側都是相同的(不管鍵集是什麼)。