为唯一的字符串种子生成唯一的 Long
generate unique Long for unique String seed
我需要从任意长度的字符串种子生成一个长度为 10 位或更多位的唯一 Long
。在正常情况下,这是不可能的,因为 String
排列比 Long
可以存储的多,但是我知道系统不会生成比我可以存储在 [=] 中更多的 Strings
10=],如何在这种情况下为每个 String
生成唯一的 Long
?
我不能使用动态完美哈希,因为它太耗时,我不能使用最小完美哈希函数,因为我不希望生成的数字是连续的。
编辑:我无法存储有关已处理字符串的任何信息,包括它们的数量
你可以使用这样的计数器
final AtomicLong counter = new AtomicLong();
final Map<String, Long> idMap = new LinkedHashMap<>();
public long idFor(String s) {
return idMap.computeIfAbsent(s, isMap::incrementAndGet);
}
这将为每个字符串 return 一个唯一的 ID。
我需要从任意长度的字符串种子生成一个长度为 10 位或更多位的唯一 Long
。在正常情况下,这是不可能的,因为 String
排列比 Long
可以存储的多,但是我知道系统不会生成比我可以存储在 [=] 中更多的 Strings
10=],如何在这种情况下为每个 String
生成唯一的 Long
?
我不能使用动态完美哈希,因为它太耗时,我不能使用最小完美哈希函数,因为我不希望生成的数字是连续的。
编辑:我无法存储有关已处理字符串的任何信息,包括它们的数量
你可以使用这样的计数器
final AtomicLong counter = new AtomicLong();
final Map<String, Long> idMap = new LinkedHashMap<>();
public long idFor(String s) {
return idMap.computeIfAbsent(s, isMap::incrementAndGet);
}
这将为每个字符串 return 一个唯一的 ID。