Java:是否有任何哈希函数可用于将字符串转换为指定范围内的数字

时间:2017-02-27 10:35:15

标签: java string algorithm hash hash-function

在java中,我需要一个哈希函数或算法,它从指定的输入字符串生成数字,使生成的数字应该在1000到6000的范围内。

要满足的条件:1)算法应始终为相同的字符串重现相同的数字。 2)算法应为每个不同的字符串生成唯一的正数3)输入字符串的数量限制在该范围内。即如果范围是5000,那么我将只允许5000个输入字符串到算法

提前致谢。

是否有可用的内置API,请参阅。

2 个答案:

答案 0 :(得分:3)

你可以这样做:

public class MyDataStructure {

    private int size, counter = 0, start;
    private Map<String, Integer> map;

    public MyDataStructure(int size, int start) {
        this.size = size;
        this.start = start;
        map = new HashMap<>();
    }

    public int add(String s) throws LimitExceededException {
        if (map.containsKey(s)) {
            return map.get(s);
        } else if (counter >= size) {
            throw new LimitExceededException();
        } else {
            map.put(s, counter + start);
            return counter++ + start;
        }
    }

}

因此,在您的情况下,您将使用new MyDataStructure(5000, 1000)初始化,然后添加字符串或使用add函数获取相应的数字。

答案 1 :(得分:0)

你的第二个条件是不可能的。 2)算法应为每个不同的字符串生成唯一编号

假设散列函数为每个字符串生成唯一的整数。 1000到6000范围内只有5000个可能的整数。 所以它可以支持最多5000个不同的字符串。