2016-09-29 135 views
1

我需要从可以是任意长度的字符串种子中生成长度为10个或更多数字的唯一Long。在正常情况下,这将是不可能做到,因为有更多的String排列比Long可以存储,但是我知道,系统将不会产生更多的Strings比我能在Long存储,我怎么能产生独特Long在这种情况下每个String为唯一的字符串种子生成唯一的长整数

我不能使用动态完美哈希,因为太耗时了,我不能使用最小完美哈希函数,因为我不想要生成数字seqentional。

编辑:我无法存储有关已处理字符串的任何信息,包括他们

+0

嗯......如果有可能,我们还会使用地图吗? – dit

回答

4

的量可以使用计数器这样

final AtomicLong counter = new AtomicLong(); 
final Map<String, Long> idMap = new LinkedHashMap<>(); 

public long idFor(String s) { 
    return idMap.computeIfAbsent(s, isMap::incrementAndGet); 
} 

这将返回一个唯一的ID为每个字符串。

+0

这将是一个很好的解决方案,但我不能存储任何关于已处理字符串的信息,包括已处理字符串的数量(将添加此规则以发布) –

+2

@AkakaJaworek没有存储任何信息,您需要一个散列策略,它将是随机的比独特。 –

+0

@AkkaJaworek或者您需要将字符串解析为唯一编号的方法。例如说,该字符串包含一个您可以解析的唯一编号。 –

相关问题