java IllegalArgumentException:比较方法违反了它的一般约定
以下是我的比较:
class CostComparator implements Comparator<Index> {
@Override
public int compare(Index itemIndex1, Index itemIndex2) {
return Grid[itemIndex1.x][itemIndex1.y].cost >
Grid[itemIndex2.x][itemIndex2.y].cost ? 1 : -1;
}
}
上面的网格是项目索引的2D数组。我有一些内存方面的考虑,因此我在网格中存储索引而不是项
比较法采用指数,并在这些指数下比较项目的成本
# 1 楼答案
缺少两个值都为
equals
的情况应该改成
有关如何实现的更多信息,请参见documentation
此外,在进行比较之前,您可能需要检查可能的
null
值# 2 楼答案
简单地说,如果两个索引具有相同的成本,那么它违反了比较。它应该返回0,但它将返回-1。作为一个微不足道的违规,这意味着
compare(index, index)
将始终返回-1,而它必须返回0不过,修复起来真的很容易:
(将
Integer
更改为cost
的任何类型。)