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

Java实现按奇偶位置合并两个ArrayList数据的问题求解

正确实现交替合并列表(data1放偶数索引,data2放奇数索引)

需求说明

需要将data1的元素放入合并后combine列表的偶数索引位置(从0开始计数),data2的元素放入奇数索引位置,且两个列表长度不同时也能正常完成合并。期望的合并结果:

  • combine.get(0) => home1
  • combine.get(1) => car1
  • combine.get(2) => home2
  • combine.get(3) => car2
  • combine.get(4) => car3

原代码的问题

原代码存在几个关键错误:

  1. 循环变量i从1开始,导致索引判断完全错位(需求中0是第一个偶数索引,应该放data1的元素)
  2. 错误调用combine.remove(0),刚添加到合并列表的元素立刻被删除,逻辑完全错误
  3. 循环条件i < dataSize会少执行一次遍历,导致最后一个元素无法被添加

正确实现方案

使用两个指针分别遍历data1和data2,交替将元素添加到合并列表中:先尝试添加data1的当前元素,再尝试添加data2的当前元素,直到两个列表的元素都被处理完毕。

// 初始化测试数据
List<String> data1 = new ArrayList<>(); 
List<String> data2 = new ArrayList<>();

data1.add("home1");
data1.add("home2");
data2.add("car1");
data2.add("car2");
data2.add("car3");  

List<String> combine = new ArrayList<>();
int idx1 = 0;
int idx2 = 0;

// 交替添加元素,直到两个列表都遍历完成
while (idx1 < data1.size() || idx2 < data2.size()) {
    // 先添加data1的元素(对应偶数索引)
    if (idx1 < data1.size()) {
        combine.add(data1.get(idx1));
        idx1++;
    }
    // 再添加data2的元素(对应奇数索引)
    if (idx2 < data2.size()) {
        combine.add(data2.get(idx2));
        idx2++;
    }
}

// 验证结果
System.out.println(combine.get(0)); // home1
System.out.println(combine.get(1)); // car1
System.out.println(combine.get(2)); // home2
System.out.println(combine.get(3)); // car2
System.out.println(combine.get(4)); // car3

代码说明

  • 使用idx1和idx2两个指针分别跟踪data1和data2的当前遍历位置
  • 循环条件确保只要任意一个列表还有未处理的元素,就继续执行
  • 每次循环先尝试添加data1的元素(对应偶数索引),再尝试添加data2的元素(对应奇数索引)
  • 当其中一个列表遍历完成后,会继续添加另一个列表剩余的所有元素,满足长度不同时的合并需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:54:36