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)); } }