【发布时间】:2011-03-28 13:10:07
【问题描述】:
我有一个包含唯一 id 的 String 的对象。 (例如“ocx7gf”或“67hfs8”) 我需要为它提供一个 int hascode() 的实现,这显然是独一无二的。
如何以最简单/最快的方式将字符串转换为唯一的 int?
10 倍。
编辑 - 好的。我已经知道 String.hashcode 是可能的。但不建议在任何地方使用。实际上'如果不推荐任何其他方法 - 如果我的对象在集合中并且我需要哈希码,我应该使用它还是不使用它。我应该将它连接到另一个字符串以使其更成功吗?
【问题讨论】:
-
你不能。只有这么多的 int 值,但有无限多的字符串。因此,不是每个字符串都可以有自己的 int hascode。不过,您可以计算一个唯一的 BigInteger 哈希码。
-
@Ingo,我看不到 BigIntegers 可用作哈希码的许多用途。它们往往太大了。
-
@Jon,确实如此。琴弦本身可能是几乎最紧凑的琴键。我添加 BigInteger 的想法只是为了完整性。
-
不,到处都推荐使用哈希码,并被多个标准容器隐式使用。如果您有特定的理由不使用它来解决给定的问题,请详细说明,否则人们将不知道为什么不直接使用 Java 字符串哈希码背后的非常好的代码。
-
规则 #1:如果 JDK 已经提供了东西,就不要自己写东西。 JDK 代码一直在更新,因此您只需更新到较新的 Java 版本即可获得性能更好的实现。如果您自己编写它,它不仅会比 JDK 提供的更糟糕(让我们在这里真实一点:这是您与整个 Sun/Oracle 程序员团队的较量)您承担了负担维护它。不要试图变得聪明,只要做到
String.hashCode()。您想要优化您的代码,您的代码中可能还有很多其他地方可以从优化中受益。