为什么java字符串哈希代码在不同但相似的geohash字符串上有很多冲突?
Geohash字符串是我的稀疏逻辑回归模型中的一个特性。所以我使用java字符串hashCode在geohash字符串上生成int值,以获取特征id。但我发现hashCode方法在类似的geohash字符串上表现不佳。这会导致不同的特征具有相同的特征id,即使特征相似,也可能不利于模型优化。 例如,那些相似的geohash字符串对具有相同的哈希代码
<"wws8vw", "wws8x9">
"wws8vw".hashCode() = -774715770
"wws8x9".hashCode() = -774715770
<"wmxy0", "wmxwn">
"wmxy0".hashCode() = 113265337
"wmxwn".hashCode() = 113265337
我猜geohash生成器方法和java hashCode方法之间有某种关系。那么,谁能给我解释一下真正的原因,以及如何减少geohash字符串上的冲突
# 1 楼答案
我认为您误解了^{} method 的目的——不是一般的哈希,而是Java对象使用这种方法的原因:
因此,如果你试图使用这种方法作为机器学习模型的输入,那么你并没有将其用于预期目的
答案相当明显:您需要设计自己的散列方法——或者选择一个预先存在的方法——为您的预期输入提供所需的冲突配置文件。你不能更改
String.hashCode()
使用的那个