簡體   English   中英

字符串的Java哈希碼從0-1

[英]Java hashcode of string from 0-1

所以我知道我可以簡單地通過執行.hashCode()將字符串轉換為哈希碼,但是有一種方法可以轉換(而不是返回整數),而不是返回整數。 0和1? 我當時只是想將數字除以最大可能的整數,但是不確定是否有更好的方法。

*編輯(有關我為什么要執行此操作的更多信息):我正在執行數學運算,並且我試圖對不同的對象進行分組以在其組中執行相同的數學運算,但是函數中具有不同的參數。 每個成員都有一個將它們“分組”的特征列表...所以我正在考慮將特征放入字符串中,然后對其進行哈希編碼,然后從中找到它們的分組值

您不能只除以Integer.MAX_VALUE ,因為那不能處理負數。 您可以使用:

private static double INTEGER_RANGE = 1L << 32;
...
// First need to put it in the range [0, INTEGER_RANGE)
double doubleHash = ((long) text.hashCode() - Integer.MIN_VALUE) / INTEGER_RANGE;

就我所知,應該沒關系...但是我不會對發行版發表任何聲明。 可能存在相當簡單的方法,即使用32位在正確的范圍內制作一個唯一的double(每個唯一的哈希碼),但是如果您對此不太在意,這會更簡單。

划分它應該可以,但是由於四舍五入等問題,您可能會失去一些“精度”,而雙精度可能會有。

通常,使用散列來標識某些事物以確保其唯一性,而精度降低可能會帶來問題。

您可以編寫自己的String.hashCodeDouble()返回所需的數字,也許使用常見的哈希算法(例如MD5)並將其調整為所需的響應范圍。

示例:對String進行MD5獲取哈希,然后在其前面簡單地添加一個0

請記住,.hashCode()在Java中的許多函數中都使用過,您不能簡單地覆蓋它。

這聞起來很不好,但可能會做您想做的:

Integer iHash = "123".hashCode();
String sHash = "0."+iHash;
Double dHash = Double.valueOf(sHash);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM