为唯一的字符串种子生成唯一的 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。