Java數組拷貝copy


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

}

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM