Java中如何将数组中的0替换为另一个数组的元素
数组0元素按位替换实现方案
你给出的场景中,数组a尾部的连续0数量和数组b的长度完全匹配,只需要把b的元素按顺序填入a的0位置即可,有两种常用实现方式:
1. 基础循环实现(逻辑直观,无特殊API依赖)
核心思路是先找到a中第一个待替换的0的下标,再遍历b把元素挨个填到对应位置,代码如下:
import java.util.Arrays; public class Main { public static void main(String[] args) { int[] a = {1,2,3,0,0,0}; int[] b = {7,9,13}; // 定位第一个0的位置 int startPos = 0; for (int i = 0; i < a.length; i++) { if (a[i] == 0) { startPos = i; break; } } // 逐位替换 for (int i = 0; i < b.length; i++) { a[startPos + i] = b[i]; } System.out.println(Arrays.toString(a)); // 输出结果:[1, 2, 3, 7, 9, 13] } }
2. JDK原生方法实现(代码简洁,性能更好)
可以直接用JDK自带的System.arraycopy方法做数组拷贝,这个方法是底层native实现,处理大数组时性能比手写循环高,代码如下:
import java.util.Arrays; public class Main { public static void main(String[] args) { int[] a = {1,2,3,0,0,0}; int[] b = {7,9,13}; // 针对尾部连续0的场景,直接计算替换起始位置 int startPos = a.length - b.length; // 参数顺序:源数组、源数组拷贝起始下标、目标数组、目标数组写入起始下标、拷贝元素长度 System.arraycopy(b, 0, a, startPos, b.length); System.out.println(Arrays.toString(a)); // 输出结果:[1, 2, 3, 7, 9, 13] } }
注意点
- 以上两种写法默认适配你给出的「数组a尾部连续0的数量等于数组b长度」的场景,如果0不是连续排在a的尾部,不要直接用长度差计算起始位置,遍历a时按顺序遇到0就替换即可
- 正式使用时建议加一层长度校验,确认待替换的0的数量和b的长度匹配,避免抛出
ArrayIndexOutOfBoundsException
内容的提问来源于stack exchange,提问作者dilip
相关产品推荐
相关产品推荐

