我正在尝试从Java中的字符串获取ID,我想我会使用哈希码(是的,两个字符串可以具有相同的哈希码,但我可以承受的概率很小)。我希望此ID最多包含4位数字。有可能吗?
这是String默认的hashCode实现:
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
我可以覆盖它以产生4位数字的哈希吗?
答案 0 :(得分:1)
一个简单的技巧是仅获取最后四位数字:
private static int myHash(String s) {
return s.hashCode() % 10000;
}
编辑:
如@Holger所评论,hashCode()
可能返回负值。如果要求返回一个四位数的正整数,则可以采用绝对值:
private static int myHash(String s) {
return Math.abs(s.hashCode() % 10000);
}