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

合并两个ArrayList并排序去零的代码调试求助:输出仅显示第二个列表的问题解决

解决ArrayList合并、排序与去零的问题

我来帮你捋清楚问题所在,以及怎么修复~

首先看你的代码里的几个关键问题:

  • 你用Arrays.asList()创建的列表是固定大小的不可修改列表,就算你想替换元素,直接操作可能会报错;
  • 你的循环里只是把临时变量hold赋值成了nums2的元素,根本没对nums1做任何修改,所以打印hold只会输出nums2的内容;
  • 你还没做合并后的排序和去零操作。

下面给你两种修复方案,按需选择:

方案一:修改原nums1列表

这种方式是把nums2的元素替换到nums1的0位置,再处理去零和排序:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class MergeListsDemo {
    public static void main(String[] args) {
        // 转成可修改的ArrayList(Arrays.asList返回的列表不可修改)
        List<Integer> nums1 = new ArrayList<>(Arrays.asList(1,2,3,0,0,0));
        int m = 3;
        List<Integer> nums2 = new ArrayList<>(Arrays.asList(2,5,6));
        int n = 3;

        // 将nums2的元素替换到nums1的末尾0位置
        for (int i = 0; i < n; i++) {
            nums1.set(i + m, nums2.get(i));
        }

        // 移除所有0元素
        nums1.removeAll(Collections.singleton(0));

        // 对合并后的列表排序
        Collections.sort(nums1);

        // 输出结果
        System.out.println(nums1); // 输出:[1, 2, 2, 3, 5, 6]
    }
}

方案二:创建新列表合并(不修改原列表)

如果你不想改动原来的nums1和nums2,这种方式更直观:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class MergeListsDemo {
    public static void main(String[] args) {
        List<Integer> nums1 = Arrays.asList(1,2,3,0,0,0);
        int m = 3;
        List<Integer> nums2 = Arrays.asList(2,5,6);
        int n = 3;

        // 创建新列表存放合并结果
        List<Integer> mergedList = new ArrayList<>();
        // 添加nums1的有效元素(前m个,排除后面的0)
        mergedList.addAll(nums1.subList(0, m));
        // 添加nums2的所有元素
        mergedList.addAll(nums2);

        // 移除所有0(这里nums1的有效元素没有0,这步可省略,保留是为了通用场景)
        mergedList.removeAll(Collections.singleton(0));

        // 排序
        Collections.sort(mergedList);

        // 输出结果
        System.out.println(mergedList); // 输出:[1, 2, 2, 3, 5, 6]
    }
}

关键知识点说明:

  • Arrays.asList()返回的是java.util.Arrays$ArrayList,不是标准的java.util.ArrayList,它的大小固定,无法自由修改元素,所以必须转成可修改的ArrayList;
  • 替换列表元素要用set()方法,临时变量赋值只是存了个值,根本不会影响原列表;
  • removeAll(Collections.singleton(0))可以一次性移除所有0元素,比逐个遍历移除更简洁;
  • Collections.sort()可以直接对List进行自然排序(整数默认升序)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:27:36