为唯一的String种子生成唯一的Long

时间:2016-09-29 10:37:49

标签: java string algorithm long-integer

我需要从String种子生成一个长度为10或更多的唯一Long,可以是任意长度。在正常情况下,这是不可能的,因为String排列比Long可以存储的更多,但是我知道系统不会生成StringsLong更多Long。 1}},在这种情况下,如何为每个String生成唯一的c

我不能使用动态完美哈希,因为太耗时而且我不能使用最小的完美哈希函数,因为我不想生成数字来进行序列化。

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

1 个答案:

答案 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。