有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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


共 (2) 个答案

  1. # 1 楼答案

    这是因为算术运算的结果溢出了Integer所允许的最大值

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

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

  2. # 2 楼答案

    return a.val-b.val;
    

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

    相反,您可以使用:

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

    或者,最好使用helper方法构造Comparator

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