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循環

代碼靈活,但效率低公司簡介

 


免責聲明!

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



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