利用java.lang.System中的arraycopy()方法实现往数值指定中的指定位置插入一个指定元素

实际开发中,我们往往需要往一个数组的指定位置插入一个指定元素;

/**
 * 用arraycopy()实现往数组指定位置插入一个指定的元素
 * @author HQ
 * @e-mail ahmashq95@gmail.com
 * @date 2018/10/8.
 */
public class test {
    public static void main(String[] args) {
        String s1[]={"aa","bb","cc","dd"};

        s1=insertElment(s1,3,"xx");
        for(String temp:s1){
            System.out.println(temp);
        }

    }

    /**
     * 返回已经插入后的数组
     * @param str
     * @param index
     * @param elment
     * @return
     */
    public  static String[] insertElment(String str[],int index,String elment){
        String s2[]=new String[str.length+1];
        System.arraycopy(str,0,s2,0,index);
        s2[index]=elment;
        System.arraycopy(str,index,s2,index+1,str.length-index);
        return s2;
    }
}

 

`java.lang.System.arraycopy` 是 Java 标准库中的一个本地方法,用于高效地复制数组内容。它可以直接操作内存地址来进行数据块的转移,因此比逐个元素赋值的方式更快捷也更安全(避免了手动索引可能出现的错误)。以下是关于 `System.arraycopy` 更详细的介绍: ### 方法签名 ```java public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) ``` #### 参数说明: - **src**:源数组,即从中复制元素的数组。 - **srcPos**:从源数组中开始复制的第一个元素位置(索引),必须是非负数并且不大于源数组长度减去要复制的元素数目 (`length`)。 - **dest**:目标数组,即将复制过来的元素放入其中的新数组。 - **destPos**:在目标数组中放置第一个元素位置(索引),同样需要满足非负以及不超过目标数组剩余空间的要求。 - **length**:想要复制的元素数量,这个数字不能超过两个数组各自的可用部分。 #### 特点及注意事项: 1. **类型一致性**:源和目标数组的组件类型应当兼容。对于原始类型的数组来说就是完全相同的类型;而对象引用类型的数组则允许子类向上转型的关系存在。 2. **性能优势**:因为它是通过 JVM 内部优化过的机制直接操作内存完成工作,所以在大量连续元素迁移任务上效率极高。 3. **抛出异常的情况**: - 如果任一输入参数非法(比如负数、超出界限等)会立即抛出 `ArrayIndexOutOfBoundsException`。 - 若传入的对象不是真正的数组,则会有 `NullPointerException` 或者其他运行时异常发生。 4. **线程安全性问题**:由于这是一个低级别的原生函数,所以不会涉及到高级别的同步控制,这意味着并发环境下使用该方法需要注意外部锁定或其他协调策略。 示例代码展示了如何使用 `System.arraycopy` 来快速复制一部分整型数组的内容到另一个新的整型数组里: ```java import java.util.Arrays; class Main { public static void main(String[] args) { // 初始化源数组 int[] source = {1, 2, 3, 4, 5}; // 创建一个新的足够大的目标数组 int[] destination = new int[source.length]; // 执行arraycopy操作 System.arraycopy(source, 0, destination, 0, source.length); // 输出结果验证 System.out.println("Source: " + Arrays.toString(source)); System.out.println("Destination after copy: " + Arrays.toString(destination)); } } ``` 以上程序将会把整个 `source` 数组的所有元素完整无误地转移到 `destination` 数组当中,并打印出来进行确认。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值