我需要从String种子生成一个长度为10或更多的唯一Long
,可以是任意长度。在正常情况下,这是不可能的,因为String
排列比Long
可以存储的更多,但是我知道系统不会生成Strings
比Long
更多Long
。 1}},在这种情况下,如何为每个String
生成唯一的c
?
我不能使用动态完美哈希,因为太耗时而且我不能使用最小的完美哈希函数,因为我不想生成数字来进行序列化。
编辑:我无法存储有关已经处理的字符串的任何信息,包括它们的数量
答案 0 :(得分:4)
您可以使用这样的计数器
final AtomicLong counter = new AtomicLong();
final Map<String, Long> idMap = new LinkedHashMap<>();
public long idFor(String s) {
return idMap.computeIfAbsent(s, isMap::incrementAndGet);
}
这将为每个String返回一个唯一的id。