You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Comparator排序TreeNode时-2147483648排序异常如何解决

错误原因

Java中int是32位有符号整数,取值范围为[-2147483648, 2147483647],你在compare方法中直接返回a.val - b.val的写法会触发整数溢出:
当b.val为-2147483648(int类型最小值),和任意正整数a.val做减法时,a.val - (-2147483648)的结果会超出int的最大值上限,溢出后结果变为负数,会让Comparator错误判定a的排序优先级高于b。你的场景中就因为这个问题,导致最小值-2147483648被错误排到了序列末尾。

修复方案

以下三种方案都可以规避整数溢出问题,实现正确排序:

  1. 调用JDK内置的Integer.compare方法完成比较(兼容性最好,推荐使用)
Collections.sort(list,new Comparator<>(){
    public int compare(TreeNode a,TreeNode b)
    {
        return Integer.compare(a.val, b.val);
    }
});
  1. Java 8及以上版本可以使用更简洁的Comparator构造写法
Collections.sort(list, Comparator.comparingInt(node -> node.val));
  1. 手动实现大小判断逻辑,全程不使用减法运算
Collections.sort(list,new Comparator<>(){
    public int compare(TreeNode a,TreeNode b)
    {
        if (a.val < b.val) return -1;
        if (a.val > b.val) return 1;
        return 0;
    }
});

内容的提问来源于stack exchange,提问作者LUs3r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:36:03