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

for*_*ath 1 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
Run Code Online (Sandbox Code Playgroud)

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

And*_*ner 5

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

支持此方法的好处是哈希表,例如HashMap提供的哈希表.

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

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