我已经这样做好几天了。我们的作业要求我覆盖 equals()
更重要的是,hashCode()
。比较对象:
二维 int 数组。
hashCode()
的标准:
从视觉上看,这意味着如果我有这两个二维数组:
arr 1 arr2
[0, 0, 1] [1, 0, 0]
[1, 0, 0] [0, 0, 1]
[0, 0, 1] [1, 0, 0]
以下两个打印语句将是相同的,因为 arr2
是 arr1
的反射(reflect).
System.out.println(arr1.hashCode());
System.out.println(arr2.hashCode());
现在,我对如何实现这一点感到很无助。我想我必须做这样的事情(伪):
int hashCode() {
lastHash = listOfArrays.last().hashCode()
variants = this.getHashVariants()
foreach (variants as v)
if (lastHash == v) return v
return this.SystemGeneratedHash()
}
这种方法可能会出现很多错误,但我很困惑,这就是我能想到的。制作 hashCode()
的想法- 函数依赖于外部列表也感觉很恶心。关于这个主题的讲座很糟糕,搜索引擎到目前为止还没有对我有利。
问:如何让不相同对象只要满足一定的要求就返回相同的hashCode?p>
最佳答案
对此有几种可能的解决方案。这里有四个,就在我的脑海中 -
- 只需返回一个常量。
- 将所有单元格中的数字相加并返回。
- 取矩阵行列式的绝对值。
- 将每个条目乘以单元格到最近角点的距离,然后将它们相加。
这仅受您的想象力的限制。
关于java - hashCode() 根据条件返回特定代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22926450/