java比较器未正确排序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
预期产出:-2147483648,2,3,5,9
# 1 楼答案
这是因为算术运算的结果溢出了
Integer
所允许的最大值在某个点进行比较时,循环会返回大于整数所支持的最大值的
return 9 - (-2147483648)
避免这些情况的最佳选择是使用Java提供的方法
Integer.compare(a,b)
,正如@andy turner在回答中提到的那样# 2 楼答案
与所有整数算术一样,如果操作数太大,则会发生溢出
相反,您可以使用:
或者,最好使用helper方法构造
Comparator
: