比较器未正确排序-2147483648



尝试使用比较器对[5,3,9,-2147483648,2]进行排序,其中值为TreeNode

树节点结构:

public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}

以下是我的代码:

Collections.sort(list,new Comparator<>(){
public int compare(TreeNode a,TreeNode b)
{
return a.val-b.val;
}
});

这里的列表是树节点的集合

实际输出:2,3,5,9,-2147483648

预期产量:-214748368,2,3,5,9

return a.val-b.val;

与所有整数算术一样,如果操作数过大,则会发生溢出。

相反,您可以使用:

return Integer.compare(a.val, b.val);

或者,更好的是,使用辅助方法构建Comparator

list.sort(Comparator.comparingInt(a -> a.val));

所以发生这种情况是因为算术运算的结果溢出了Integer允许的最大数。

当在某个点进行比较时,循环执行return 9 - (-2147483648),返回大于整数2147483647支持的最大值的2147483657

避免这些情况的最佳选择是使用Java提供的方法Integer.compare(a,b),正如@andy turner在他的回答中提到的那样。