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
相關文章
- [分享]javascript 陣列以及物件的深拷貝(複製陣列或複製物件)的方法JavaScript陣列物件
- javascript 陣列的深度複製JavaScript陣列
- C# 陣列的複製C#陣列
- Java實現檔案複製的四種方式Java
- Java 語法介紹(四):陣列(轉)Java陣列
- c語言的陣列C語言陣列
- java函式陣列引數的複製問題Java函式陣列
- JavaScript&ES6----陣列去重的四種方法JavaScript陣列
- js如何複製指定的陣列JS陣列
- C語言陣列C語言陣列
- go 語言陣列Go陣列
- 易語言帶陣列json的編寫方法陣列JSON
- C語言:排列陣列的三種方法:冒泡法、選擇法、插入法C語言陣列
- JS 複製陣列和物件JS陣列物件
- C#中複製陣列C#陣列
- JS中的陣列複製問題JS陣列
- C語言(字元陣列)C語言字元陣列
- c語言字元陣列C語言字元陣列
- C語言_指標和陣列的幾種訪問形式C語言指標陣列
- javascript如何複製一個陣列JavaScript陣列
- C語言 簡單的佇列(陣列佇列)C語言佇列陣列
- Go語言複製檔案Go
- 用SQL語句刪除重複記錄的四種方法SQL
- Java中查詢陣列多數元素的4種方法Java陣列
- 陣列去重的六種方法陣列
- 遍歷陣列的幾種方法陣列
- 陣列去重的幾種方法陣列
- javascript中陣列的22種方法JavaScript陣列
- 陣列去除重複的幾個方法陣列
- 【演算法-初級-陣列】刪除排序陣列中的重複項(多語言版實現)演算法陣列排序
- 一種快速可預製的隨機陣列產生方法(轉)隨機陣列
- 陣列(引用型別)複製問題陣列型別
- C# unsafe 快速複製陣列C#陣列
- java陣列遍歷的方法Java陣列
- java陣列拷貝的方法Java陣列
- android典型程式碼系列(十九)------將一個陣列複製成為另外一個陣列的方法Android陣列
- java語言屬於哪種語言Java
- 第四種Web語言:WebAssemblyWeb