【问题标题】:generate unique Long for unique String seed为唯一的字符串种子生成唯一的 Long
【发布时间】:2016-09-29 10:37:49
【问题描述】:

我需要从可以是任意长度的字符串种子中生成一个长度为 10 位或更多位的唯一 Long。在正常情况下这是不可能的,因为String 排列比Long 可以存储的要多,但是我知道系统不会生成比我可以存储在Long 中更多的Strings,我该如何生成在这种情况下,每个String 都有唯一的Long?

我不能使用动态完美散列,因为太费时,而且我不能使用最小完美散列函数,因为我不希望生成的数字是连续的。

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

【问题讨论】:

  • 嗯...如果可能的话,我们还会使用地图吗?

标签: java string algorithm long-integer


【解决方案1】:

你可以使用这样的计数器

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

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

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

【讨论】:

  • 这将是一个很好的解决方案,但我无法存储有关已处理字符串的任何信息,包括已处理字符串的数量(将在帖子中添加此规则)
  • @AkkaJaworek 不存储任何信息,您需要一个随机而不是唯一的散列策略。
  • @AkkaJaworek 或者您需要一种将字符串解析为唯一数字的方法。例如,假设字符串包含一个可以解析的唯一数字。
  • 如果我知道: 1. 每个字符串都是唯一的。 2. 字符串的数量小于MAX_INT 是否还有可能使用hashCode() 会生成两个相同的整数?如果没有,那么我可以将它们用作随机浮点生成器的种子
  • 我相信这是从字符串创建唯一长 id 的唯一方法。
猜你喜欢
  • 2011-01-12
  • 1970-01-01
  • 2011-02-03
  • 2011-09-24
  • 2016-03-26
  • 2012-11-21
  • 2010-10-18
相关资源
最近更新 更多