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 数组复制的主要内容,如果未能解决你的问题,请参考以下文章
什么是在 C++ 中获取总内核数量的跨平台代码片段? [复制]