Java数组拷贝
方法一 : 利用for循环进行数值的copy,生成新的数组; 示例如下:
package com.mybatis.demo.bk; import java.util.Arrays; /** * @author yinsenxin */ public class BkArray { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; int[] newArray = forCopy(array); System.out.println(Arrays.toString(newArray)); } /** * 利用for循环进行数组拷贝 * * @param array * @return */ public static int[] forCopy(int[] array){ int [] array2 = new int [array.length]; for (int i = 0; i < array.length; i++) { array2[i] = array[i]; } return array2; } }
方法二: 利用Object中的clone方法,进行拷贝;示例如下:
package com.mybatis.demo.bk; import java.util.Arrays; /** * @author yinsenxin */ public class BkArray { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; int[] newArray = cloneArray(array); System.out.println(Arrays.toString(newArray)); } /** * * 利用Object类中的 clone()方法 进行数组拷贝 * @param array * @return */ public static int[] cloneArray(int [] array){ if (array == null){ return null; } int[] clone = array.clone(); return clone; } }
方法三:利用System.arraycopy()方法进行拷贝;该方法是个native修饰的本地方法;源码如下:
其中参数为 1.源数组 2.源数组下标位置 3.目标数组(准备拷贝到哪个数组上) 4.目标数组的下标位置 5.拷贝元素的个数
如下示例: 就是将array数组从下标为0开始拷贝,拷贝到新数组 newArray上的0下标处,拷贝的个数为源数组的长度,即全拷贝
package com.mybatis.demo.bk; import java.util.Arrays; /** * @author yinsenxin */ public class BkArray { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; int[] newArray = new int[array.length]; systemArrayCopy(array, 0, newArray, 0,array.length); System.out.println(Arrays.toString(newArray)); } /** * 通过 System.arrayCopy 方法来进行数组Copy * * @param array 源数组 * @param srcPos 源数组下标位置 * @param array2 目标数组 * @param destPos 目标数组下标位置 * @param length 拷贝的元素个数 */ public static void systemArrayCopy(int []array,int srcPos,int [] array2,int destPos,int length){ System.arraycopy(array,srcPos,array2,destPos,length); } }
方法四 : 利用Arrays.copyOf方法进行数组拷贝, 其底层也是通过System.arraycopy方法来实现的;源码如下 :
其中参数为: 1.要拷贝的源数组 2.拷贝的长度(新数组的长度);
PS: Math.min()方法 限制了你传递的要拷贝的长度,即使你传递的长度比原数组还要大,最后取的还是2者之间最小的值作为拷贝的长度依据;
示例如下:
package com.mybatis.demo.bk; import java.util.Arrays; /** * @author yinsenxin */ public class BkArray { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; int[] newArray = arraysCopy(array, array.length); System.out.println(Arrays.toString(newArray)); } /** * * 利用Arrays.copyOf()方法进行 数组copy * @param array 源数组 * @param length 拷贝长度 * @return */ public static int[] arraysCopy(int[] array, int length){ int [] ints = Arrays.copyOf(array, length); return ints; } }
方法五: 使用Arrays.copyOfRange(),此方法是范围拷贝;其底层实现还是通过System.arraycopy来实现的; 源码如下:
参数如下: 1.源数组 2.拷贝的起始位置 3.拷贝的结束位置;
示例如下:
package com.mybatis.demo.bk; import java.util.Arrays; /** * @author yinsenxin */ public class BkArray { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; int[] newArray = Arrays.copyOfRange(array, 0, array.length); System.out.println(Arrays.toString(newArray)); } }