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
原代码的问题
原代码存在几个关键错误:
- 循环变量
i从1开始,导致索引判断完全错位(需求中0是第一个偶数索引,应该放data1的元素) - 错误调用
combine.remove(0),刚添加到合并列表的元素立刻被删除,逻辑完全错误 - 循环条件
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
相关产品推荐
相关产品推荐

