java语言复制数组的四种方法

参考:http://www.cnblogs.com/dream-it-possible/p/7018804.html

来源于牛客网的一道选择题:

JAVA语言的下面几种数组复制方法中,哪个效率最高?

A.for循环逐一复制
B.System.arraycopy
C.System.copyof
D.使用clone方法

效率:System.arraycopy > clone > Arrays.copyOf > for循环

1、System.arraycopy的用法:

其为native方法,即原生态方法,关键字native说明它不是用java语言写的,而是调用其他语言的代码,因此效率最高

  1. public static void native arraycopy(Object src,
  2.    int srcPos,
  3. Object dest,
  4. int destPos,
  5. int length)

  参数: src - 源数组。

      srcPos - 源数组中的起始位置。

      dest - 目标数组。

      destPos - 目标数据中的起始位置。

      length - 要复制的数组元素的数量

2、clone 的用法

Object.clone

从源码来看同样也是native方法,所以也是底层的C语言实现的,但返回为Object类型,所以赋值时将发生强转,所以效率不如1

protected native Object clone() throws CloneNotSupportedException;

例:

class Aby implements Cloneable{

public int i;

public Aby(int i) {

this.i = i;

}

@Override

public Object clone() throws CloneNotSupportedException {

// TODO Auto-generated method stub

return super.clone();

}

}

public class Solution {

public static void main(String[] args) throws CloneNotSupportedException {

Aby aby1 = new Aby(1);

Aby aby2 = (Aby) aby1.clone();

aby1.i = 2;

System.out.println(aby1.i); //2

System.out.println(aby2.i); //1

Aby[] arr = {aby1,aby2};

Aby[] arr2 = arr.clone();

arr2[0].i = 3;

System.out.println(arr[0].i); //3

System.out.println(arr2[0].i); //3

}

}

3、Arrays.copyOf 的用法:

有十种重载方法,复制指定的数组,返回原数组的副本。具体可以查看jdk api

java.util.Arrays.Arrays.copyOf(源数组,新数组长度);

java.util.Arrays.copyOfRange(源数组,开始拷贝位置,结束拷贝位置);

它的源代码

+ View code

public static int[] copyOf(int[] original, int newLength) {

  int[] copy = new int[newLength];

  System.arraycopy(original, 0, copy, 0,

    Math.min(original.length, newLength));

  return copy;

}

实际上它调用的就是System.arraycopy。

4、for循环

代码灵活,但效率低公司简介