为什么java字符串hashCode在不同但相似的geohash字符串上有很多冲突?

时间:2016-07-29 07:13:05

标签: java hashcode geohashing

Geohash字符串是我的稀疏逻辑回归模型中的一个特性。所以我使用java字符串hashCode在geohash字符串上生成int值以获取功能ID。但我发现hashCode方法在类似的geohash字符串上表现不佳。它导致不同的功能具有相同的功能ID,即使功能类似,模型优化也可能不好。 例如,那些类似的geohash字符串对具有相同的hashCode。

<"wws8vw", "wws8x9">
    "wws8vw".hashCode() = -774715770
    "wws8x9".hashCode() = -774715770
<"wmxy0", "wmxwn">
    "wmxy0".hashCode() = 113265337
    "wmxwn".hashCode() = 113265337

我猜它在geohash生成器方法和java hashCode方法之间有一些关系。那么,任何人都可以向我解释真正的原因以及如何减少geohash字符串上的冲突?

1 个答案:

答案 0 :(得分:5)

我认为你误解了Object.hashCode() method的目的 - 一般不是散列,而是Java对象有这种方法的原因:

  

支持此方法是为了哈希表的优势,例如HashMap提供的哈希表。

因此,如果您尝试将此方法用作机器学习模型的输入,则不会将其用于预期目的。

答案非常明显:您需要设计自己的散列方法 - 或者选择一个预先存在的散列方法 - 它可以为您提供所需输入的碰撞配置文件。 String.hashCode()使用的那个不能由您更改。