java語言複製陣列的四種方法
來源於牛客網的一道選擇題:
JAVA語言的下面幾種陣列複製方法中,哪個效率最高?
A.for迴圈逐一複製
B.System.arraycopy
C.System.copyof
D.使用clone方法
效率:System.arraycopy > clone > Arrays.copyOf > for迴圈
1、System.arraycopy的用法:
- public static void arraycopy(Object src,
- int srcPos,
- Object dest,
- int destPos,
- int length)
引數:
src
- 源陣列。
srcPos
- 源陣列中的起始位置。
dest
- 目標陣列。
destPos
- 目標資料中的起始位置。
length
- 要複製的陣列元素的數量
應用例項:
- public class Main{
- public static void main(String[] args) {
- int[] a1={1,2,3,4,5,6};
- int[] a2={11,12,13,14,15,16};
- System.arraycopy(a1, 2, a2, 3, 2);
- System.out.print("copy後結果:");
- for(int i=0;i<a2.length;i++){
- System.out.print(a2[i]+" ");
- }
- }
- }
執行結果:
2、clone 的用法:
java.lang.Object類的clone()方法為protected型別,不可直接呼叫,需要先對要克隆的類進行下列操作:
首先被克隆的類實現Cloneable介面;然後在該類中覆蓋clone()方法,並且在該clone()方法中呼叫super.clone();這樣,super.clone()便可以呼叫java.lang.Object類的clone()方法。
應用例項:
- //被克隆的類要實現Cloneable介面
- class Cat implements Cloneable
- {
- private String name;
- private int age;
- public Cat(String name,int age)
- {
- this.name=name;
- this.age=age;
- }
- //重寫clone()方法
- protected Object clone()throws CloneNotSupportedException{
- return super.clone() ;
- }
- }
- public class Clone {
- public static void main(String[] args) throws CloneNotSupportedException {
- Cat cat1=new Cat("xiaohua",3);
- System.out.println(cat1);
- //呼叫clone方法
- Cat cat2=(Cat)cat1.clone();
- System.out.println(cat2);
- }
- }
3、複製引用和複製物件的區別
複製引用:是指將某個物件的地址複製,所以複製後的物件副本的地址和源物件相同,這樣,當改變副本的某個值後,源物件值也被改變;
複製物件:是將源物件整個複製,物件副本和源物件的地址並不相同,當改變副本的某個值後,源物件值不會改變;
- Cat cat1=new Cat("xiaohua",3);//源物件
- System.out.println("源物件地址"+cat1);
- //呼叫clone方法,複製物件
- Cat cat2=(Cat)cat1.clone();
- Cat cat3=(Cat)cat1;//複製引用
- System.out.println("複製物件地址:"+cat2);
- System.out.println("複製引用地址:"+cat3);
輸出結果:
可以看出,複製引用的物件和源物件地址相同,複製物件和源物件地址不同
4、Arrays.copyOf 的用法:
Arrays.copyOf有十種過載方法,複製指定的陣列,返回原陣列的副本。具體可以檢視jdk api
原文地址:http://blog.csdn.net/tingzhiyi/article/details/52344845
相關文章
- c語言的陣列C語言陣列
- 易語言帶陣列json的編寫方法陣列JSON
- JavaScript&ES6----陣列去重的四種方法JavaScript陣列
- go 語言陣列Go陣列
- C語言陣列C語言陣列
- C語言:排列陣列的三種方法:冒泡法、選擇法、插入法C語言陣列
- JS 複製陣列和物件JS陣列物件
- c語言字元陣列C語言字元陣列
- JS中的陣列複製問題JS陣列
- C# unsafe 快速複製陣列C#陣列
- Java中查詢陣列多數元素的4種方法Java陣列
- 【演算法-初級-陣列】刪除排序陣列中的重複項(多語言版實現)演算法陣列排序
- 遍歷陣列的幾種方法陣列
- 陣列去重的幾種方法陣列
- 陣列去重的六種方法陣列
- 陣列去除重複的幾個方法陣列
- Go語言複製檔案Go
- java陣列遍歷的方法Java陣列
- java語言屬於哪種語言Java
- 七種常見的陣列排序演算法整理(C語言版本)陣列排序演算法C語言
- 陣列(引用型別)複製問題陣列型別
- 第四種Web語言:WebAssemblyWeb
- C語言 指標與陣列C語言指標陣列
- C語言基礎-1、陣列C語言陣列
- 玩轉陣列各種方法陣列
- 分割陣列的幾種方法比較陣列
- JS陣列去重的10種方法JS陣列
- JS陣列去重的幾種方法JS陣列
- java陣列中重複元素的去重Java陣列
- GO語言————7.5 切片的複製與追加Go
- C語言系列之 指標與陣列總複習視訊教程C語言指標陣列
- java 陣列的定義(宣告)方法Java陣列
- c語言中陣列的三種型別C語言陣列型別
- NumPy 陣列複製與檢視詳解陣列
- Java建立陣列、賦值的四種方式,宣告+建立+初始化 詳解Java陣列賦值
- 將一個陣列複製到另一個陣列上陣列
- C語言如何計算陣列的長度C語言陣列
- c語言-運算子,陣列,指標C語言陣列指標