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