【发布时间】:2012-05-23 08:33:37
【问题描述】:
我正在寻找为非常特殊的字符串创建哈希码的最有效方法。
我有可以转换为整数的字符串,它们从 1 到 10,000 不等,而且非常集中在 1-600 范围内。
我的问题是,就从集合中检索项目以实现其哈希码的性能而言,最有效的方法是什么。
我的想法是:
-
我可以将字符串转换为整数并使用直接访问表(10.000 行的数组) - 这对于检索来说非常快,但在内存分配方面不是很聪明;
我可以将字符串用作字符串并为其获取哈希码(我不必将其转换为整数,但我不知道字符串的哈希码在冲突方面的效果如何)
非常感谢任何其他想法。
非常感谢
感谢大家的及时回复...
还有一个我忘记补充的信息。如果我让你知道我的最终目标,我想它会让你明白这一点——我什至可能不需要哈希表!!!
我只想针对不可变的字典验证流。我想检查给定标签是否出现在我的消息中。
我将收到一个包含多对 tag=value 的字符串。我想验证我的应用程序是否必须处理标签。
【问题讨论】:
-
使用String的
hashCode方法?这是一个很好的算法。 -
@HotLicks 但是散列码的传播呢? OP有一个合法的问题。如果情况如此受限,本机 hashCode 的性能可能是另一个问题。可能会有更多性能更好的选择。
-
@Marko,为什么你认为哈希码还没有均匀分布?
-
就像我说的,
hashCodefor String 是一个非常好的算法。另一个明显的选择是使用整数值本身,但是您不能在 String 上使用简单的 HashMap —— 您必须创建自己的包装对象或混合 HashMap。 -
@HotLicks 这是一个非常好的通用算法。并在 Java 中挥洒汗水?在最后一堂课上没有高效的方法。