基于已有ArrayList大小创建新ArrayList的Java技术问题
嗨,这需求我常碰到,给你整理两种实用的实现方案,适配不同的场景需求:
合并两个等长ArrayList对应位置元素的实现
首先,既然你明确两个ArrayList<String>的size始终相等,那我们先获取其中一个的长度,接着遍历每个索引,把对应位置的元素处理后加入新列表就行。
场景1:把对应位置元素拼接成单个字符串存入新列表
比如你想让新列表的元素是"1, 5"、"2, 6"这种组合形式,代码示例如下:
import java.util.ArrayList; public class MergeArrayListsExample { public static void main(String[] args) { // 初始化你的两个列表 ArrayList<String> armArray1 = new ArrayList<>(); armArray1.add("1"); armArray1.add("2"); armArray1.add("3"); armArray1.add("4"); ArrayList<String> armArray2 = new ArrayList<>(); armArray2.add("5"); armArray2.add("6"); armArray2.add("7"); armArray2.add("8"); // 准备存储结果的新列表 ArrayList<String> mergedList = new ArrayList<>(); // 获取列表长度(两个列表长度一致,取任意一个即可) int listSize = armArray1.size(); // 遍历每个索引,合并对应元素 for (int i = 0; i < listSize; i++) { // 这里可以自定义拼接规则,比如用空格、横线分隔都可以 String combined = armArray1.get(i) + ", " + armArray2.get(i); mergedList.add(combined); } // 打印验证结果 System.out.println(mergedList); // 输出:[1, 5, 2, 6, 3, 7, 4, 8] } }
场景2:将对应位置元素交替存入新列表
如果你的需求是新列表按1, 5, 2, 6, 3, 7, 4, 8这样的顺序依次添加,只需修改循环内的逻辑:
for (int i = 0; i < listSize; i++) { mergedList.add(armArray1.get(i)); mergedList.add(armArray2.get(i)); }
额外小提示
- 虽然题目说两个列表size始终相等,但如果实际场景有不确定性,建议加个长度校验,避免索引越界:
if (armArray1.size() != armArray2.size()) { throw new IllegalArgumentException("两个列表的长度必须一致!"); } - 如果你用的是Java 8及以上版本,还可以用Stream API来实现,代码更简洁:
import java.util.stream.IntStream; import java.util.stream.Collectors; // 场景1的Stream实现 ArrayList<String> mergedList = IntStream.range(0, armArray1.size()) .mapToObj(i -> armArray1.get(i) + ", " + armArray2.get(i)) .collect(Collectors.toCollection(ArrayList::new));
不管是基础循环还是Stream方式,都能轻松覆盖你说的4到100个元素的范围,性能完全没问题~
内容的提问来源于stack exchange,提问作者Mooni
相关产品推荐
相关产品推荐

