Java String HashCode的n位数字?

时间:2018-08-03 15:49:07

标签: java string hashcode

我正在尝试从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位数字的哈希吗?

1 个答案:

答案 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);
}