Java 数组复制

Posted 呼呼睡觉睡觉啦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 数组复制相关的知识,希望对你有一定的参考价值。

在Java中数组的复制几种比较通用的方法

1、for 循环逐个复制

 //源数组
int[] source = {4,5,1,2,3};
//目标数组
int[] target = new int[source.length];
for (int i = 0;i < source.length;i++){
   target[i] = source[i];
}

2、System.arraycopy

 int[] source= {4,5,1,2,3};
 int[] target= new int[source.length];
 System.arraycopy(source, 0, target, 0, source.length);

讲解:

 /**
   *  构造方法
   *  从原数组中的第srcPos个位置起复制length个元素到目标数组的第destPos个位置
   * 
   *  src:源数组
   *  srcPos:源数组中的起始位置
   *  dest:目标数组
   *  destPos:目标数据中的起始位置
   *  length:要复制的数组元素的数量
* 注:sr c和 des 都必须是同类型或者可以进行转换类型的数组
*/ public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);

3、Arrays.copyOf

int[] source= {4,5,1,2,3};
int[] target= new int[5]; 
target= Arrays.copyOf(source, 5);

讲解:

 /**
   *  构造方法(以传递int型数组为例)
   *  复制指定的数组,返回原数组的副本
   *  original:源数组,可以为byte,short,int,long,char,float,double,boolean    
   *  newLength:新数组的长度
   */
 public static int[] copyOf(int[] original, int newLength);

4、Arrays.copyOfRange

int[] source= {4,5,1,2,3};
int[] target= new int[5]; 
target= Arrays.copyOfRange(source, 0, 5);

讲解:

 /**  构造方法(以传递int型数组为例)
   *  复制原数组original的指定部分(从from到(to-1)位),返回原数组的副本
   *  original:源数组,可以为byte,short,int,long,char,float,double,boolean
   *  from:源数组被复制的起始位置
   *  to: 源数组被复制的中止位置(不包括to本身)
   *
   */
public static int[] copyOfRange(int[] original, int from, int to);

5、Object.clone

int[] source={1,3,5,6,7,8};
int[] target;
target=(int[])source.clone();//使用clone创建

讲解:

clone()方法不仅仅是将一个数组引用赋值为另外一个数组引用,而是创建一个新的数组。
    但是我们知道,对于数组本身而言,当它的元素是对象时,本来数组每个元素中保存的就是对象的引用,
       所以拷贝过来的数组自然而言也是对象的引用,所以对于数组对象元素而言,clone()方法是浅拷贝

注:使用clone方法,得返回值类型为Object类型,所以赋值时将发生强转,因此效率较低

效率:System.arraycopy > Object.clone > (Arrays.copyOf、Arrays.copyOfRange)> for循环 

以上是关于Java 数组复制的主要内容,如果未能解决你的问题,请参考以下文章

这两个代码片段之间有区别吗?如果有,那又如何? [复制]

在 Java 中克隆 vs 复制数组? [复制]

什么是在 C++ 中获取总内核数量的跨平台代码片段? [复制]

请问java中深度copy一个二维数组是啥意思?怎么用代码实现?

VSCode自定义代码片段—— 数组的响应式方法

VSCode自定义代码片段10—— 数组的响应式方法