以下是我的比较者:
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数组。我有一些内存考虑因素,因为我在其中存储索引而不是Grid中的项目。
比较方法获取指数并比较这些指数的项目成本。
答案 0 :(得分:4)
简单地说,如果两个索引具有相同的成本,则违反了比较。 应该返回0,但它将返回-1。作为普通违规,这意味着当{em>必须返回0时,compare(index, index)
将始终返回-1。
虽然很容易解决:
return Integer.compare(Grid[itemIndex1.x][itemIndex1.y].cost,
Grid[itemIndex2.x][itemIndex2.y].cost);
(将Integer
更改为cost
的任何类型。)
答案 1 :(得分:2)
您错过了两个值均为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);
有关如何实施的更多信息,请参阅documentation。
此外,您可能需要在进行比较之前检查可能的null
值。