在java中,我需要一个哈希函数或算法,它从指定的输入字符串生成数字,使生成的数字应该在1000到6000的范围内。
要满足的条件:1)算法应始终为相同的字符串重现相同的数字。 2)算法应为每个不同的字符串生成唯一的正数3)输入字符串的数量限制在该范围内。即如果范围是5000,那么我将只允许5000个输入字符串到算法
提前致谢。
是否有可用的内置API,请参阅。
答案 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个不同的字符串。