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

Java冒泡排序未执行最后一轮遍历:ArrayList按成员ID排序失效问题

代码问题根因分析

核心错误1:未实际修改ArrayList中的元素

你代码中交换的s和t只是从ArrayList中取出的局部对象引用副本,交换这两个变量的值完全不会改变ArrayList内部存储的元素顺序,相当于所有交换操作都没有生效。

核心错误2:冒泡排序逻辑结构错误

你写的双层循环不符合冒泡排序的逻辑规则:

  • 内层循环没有缩小边界,每次都会完整遍历整个列表,做了大量无效重复判断
  • 比较逻辑是固定取外层循环的第i个元素和所有后续元素对比,没有实时对比相邻位置的元素,就算局部变量交换生效也得不到正确排序结果
修复方案

方案1:使用JDK原生工具类实现(推荐)

直接调用Collections.sort方法结合Lambda表达式实现,代码简洁性能更优:

// JDK 8及以上版本
Collections.sort(members, (m1, m2) -> Integer.compare(m1.getId(), m2.getId()));

// 也可以直接用List的sort方法
members.sort(Comparator.comparingInt(Member::getId));

方案2:修复后的冒泡排序实现

如果你需要手动实现冒泡排序逻辑,修正后的代码如下:

Member temp;
// 外层循环控制排序轮次
for (int i = 0; i < members.size() - 1; i++) {
    // 内层循环每次把当前未排序区间的最大元素沉到末尾,所以边界逐渐缩小
    for (int j = 0; j < members.size() - 1 - i; j++) {
        // 对比相邻两个位置的元素
        if (members.get(j).getId() > members.get(j+1).getId()) {
            // 交换ArrayList中实际存储的两个位置的元素
            temp = members.get(j);
            members.set(j, members.get(j+1));
            members.set(j+1, temp);
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:06:03