以下是我的比较者:
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;
}
}上面的Grid是一个项目索引的2D数组。我有一些内存方面的考虑,因此我要在网格中存储索引而不是条目。
比较方法取指标,并比较各指标的成本。
发布于 2015-02-09 17:38:10
简单地说,如果两个索引的成本相同,就违反了比较。它应该返回0,但它将返回-1。这意味着,当compare(index, index)必须返回0时,它总是返回-1。
不过,它确实很容易修复:
return Integer.compare(Grid[itemIndex1.x][itemIndex1.y].cost,
Grid[itemIndex2.x][itemIndex2.y].cost);(将Integer更改为cost的任何类型。)
发布于 2015-02-09 17:39:11
您忽略了两个值都是equals的情况。
return Grid[itemIndex1.x][itemIndex1.y].cost >
Grid[itemIndex2.x][itemIndex2.y].cost ? 1 : -1;应改为
return Integer.compare(Grid[itemIndex1.x][itemIndex1.y].cost,
Grid[itemIndex2.x][itemIndex2.y].cost);有关如何实现的更多信息,请参见文档。
此外,在进行比较之前,您可能需要检查可能的null值。
https://stackoverflow.com/questions/28415809
复制相似问题