1. 程式人生 > >java陣列的四種拷貝方法的效能分析:for、clone、System.arraycopy、Arrays.copyof

java陣列的四種拷貝方法的效能分析:for、clone、System.arraycopy、Arrays.copyof

今天作者就Java陣列的拷貝方法進行效能比較,多有不足,請大家指正!!! 1.for方法,用迴圈依次實現陣列元素的拷貝。 2.clone方法,是Object類的方法,用來實現物件的複製操作。 3.System.arraycopyof方法,是System的靜態方法,是一個native方法,用來實現陣列的複製操作,提供了多種過載方法,大家可以去看原始碼瞭解瞭解。 4.Arrays.copyof方法,是Arrays工具類的靜態方法,其底層呼叫System.arraycopy方法,也提供了多種過載方法,用來實現陣列的複製操作。 原始碼分析:
package JavaNukeTest;

import java.util.Arrays;

public class ArrayCopyTest {
	public static final int size = 10000;
	
	public static void copyByClone(String[] strArray){
		long startTime = System.nanoTime();
		String[] destArray = strArray.clone();		
		long endTime = System.nanoTime();
		System.out.println("copyByClone cost time is "+(endTime - startTime));
	}
	public static void copyByLoop(String[] strArray){
		long startTime = System.nanoTime();
		String[] destArray = new String[size];
		for (int i = 0; i < strArray.length; i++){
			destArray[i] = strArray[i];
		}
		long endTime = System.nanoTime();
		System.out.println("copyByLoop cost time is "+(endTime - startTime));
	}
	public static void copyByArrayCopy(String[] strArray){
		long startTime = System.nanoTime();
		String[] destArray = new String[size];
		System.arraycopy(strArray, 0, destArray, 0, strArray.length);
		long endTime = System.nanoTime();
		System.out.println("copyByArrayCopy cost time is "+(endTime - startTime));
	}
	public static void copyByCopyof(String[] strArray){
		long startTime = System.nanoTime();
		String[] destArray = Arrays.copyOf(strArray, strArray.length);
		long endTime = System.nanoTime();
		System.out.println("copyByCopyof cost time is "+(endTime - startTime));
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub		
		String[] strArray = new String[size];
		for (int i = 0; i < size; i++){
			strArray[i] = "abc";
		}
		copyByClone(strArray);
		copyByLoop(strArray);
		copyByArrayCopy(strArray);
		copyByCopyof(strArray);		
	}
}
執行結果: 當我把size改為10時,執行結果如下:
當我把size改為100時,執行結果如下:
當我把size改為1000時,執行結果如下:
也就是說,當陣列元素個數不是很大時,使用for來複制陣列,時間效能是最好的,clone次之,其次是System.arraycopy,最差的是Arrays.copyof。 當陣列元素個數很大時,使用System.arraycopy複製陣列,時間效能是最好的,clone次之,其次是Arrays.copyof,最差的就是for。

相關推薦

java陣列拷貝方法效能分析forcloneSystem.arraycopyArrays.copyof

今天作者就Java陣列的拷貝方法進行效能比較,多有不足,請大家指正!!! 1.for方法,用迴圈依次實現陣列元素的拷貝。 2.clone方法,是Object類的方法,用來實現物件的複製操作。 3.System.arraycopyof方法,是System的靜態方法,是一個na

Java陣列3排序方法

一、陣列封裝好的排序方法              public static void main(String[] args) {         i

JavaSystem.arraycopy() 和 Arrays.copyOf()方法

index 成員 size obj lis sco 方法測試 新建 -a System.arraycopy() 和 Arrays.copyOf()方法 閱讀源碼的話,我們就會發現 ArrayList 中大量調用了這兩個方法。比如:我們上面講的擴容操作以及add(int in

JavaSystem.arraycopy()和Arrays.copyOf()的區別

System.arraycopy() 這是一個由java標準庫提供的方法。用它進行復制陣列比用for迴圈要快的多。 arraycopy()需要的引數有:源陣列,從源陣列中的什麼位置開始複製的偏移量,

java拷貝方式及常見的陣列操作方法

一、四種拷貝方式 要確定一個方法是淺拷貝還是深拷貝,必須用引用型別的值,所以要用物件定義陣列,以下四種方法的程式碼中都用物件定義了陣列以確定拷貝型別 1.for迴圈拷貝 class TestArray { private int val = 10; public

java陣列拷貝方式

拷貝陣列方式 深拷貝/淺拷貝 是否產生新的物件 備註 for迴圈拷貝 淺拷貝 否 拷貝速度最慢 clone拷貝陣列

Java 字串拼接方式的效能比較分析

一、簡單介紹 編寫程式碼過程中,使用"+"和"contact"比較普遍,但是它們都不能滿足大資料量的處理,一般情況下有一下四種方法處理字串拼接,如下: 1、 加號"+" 2、 String的 contact()方法 3、 StringBuffer 的 append()方法 4、 StringBuil

java 陣列 for each迴圈, 陣列的兩拷貝方法Arrays.copyOf(),Arrays.toString[],匿名陣列

陣列是一種資料結構,陣列不一定裡面是數,也可以是char,String,boolean,int,double 陣列通過一個整型下標可以訪問陣列中每一個值。例如a是一個整形陣列,則a[i]就是陣列中下標為i的整數。 在宣告(區別於建立)陣列時,需要指出陣列型別

js 數組的深度拷貝實現方法

實現 個人總結 對象 () tro logs json 錯誤 深度拷貝 首先聲明本人資質尚淺,本文只用於個人總結。如有錯誤,歡迎指正、共同提高。 --------------------------------------------------------------

Java 中的引用使用場景分析

強引用 強引用的物件,永遠不會被垃圾回收,JVM 寧願丟擲 OutOfMemeory 錯誤也不會回收這種物件。 軟引用 soft 沒有強引用而只有軟引用的物件,只要記憶體空間足夠,垃圾回收器就不會回收(嚴謹的說法是,GC 根據記憶體使用情況酌情考慮什麼時候回收)。 MyO

C 中判斷空字串的3方法效能分析【月兒原創】

C#中判斷空字串的3種方法效能分析 作者:清清月兒 主頁:http://blog.csdn.net/21aspnet/           時間:2007.4.28  3種方法分別

C#中判斷空字串的3方法效能分析【月兒原創】

                C#中判斷空字串的3種方法效能分析作者:清清月兒  3種方法分別是:string a="";1.if(a=="")2.if(a==String.Empty)3.if(a.Length==0)3種方法都是等效的,那麼究竟那一種方法效能最高呢?本人用實驗說明問題。建立3個aspx頁

陣列拷貝方式

陣列的拷貝方式有四種,分別是: for迴圈    clone()   System.arraycopy()    Arrays.copyof() 一維陣列 for迴圈 拷貝數值型別 int[] array = {1,2,3,4,5,6}

JAVA之多執行緒概念及其幾實現方法優劣分析

1. 多執行緒 程式:指令集,靜態的概念 程序:作業系統調動程式,是程式的一次動態執行過程,動態的概念 執行緒:在程序內的多條執行路徑 Ps:單核的話程序都是虛擬模擬出來的,多核處理器才可以執行真正的多執行緒 單核通過CPU排程時間片實現虛擬模擬的多執行緒,比如執行main函式和GC在底層就是多執行

Java保留小數點方法

1.前言 在java的學習中,往往演算法有一個是屬於java的小數點位數保留。 一般有四種方式,如下: package java_stu; /** * @see java保留小數點示例 * */ import java.math.BigDecim

陣列複製方法

java陣列拷貝主要有四種方法,分別是迴圈賦值,System.arraycopy(),Arrays.copyOf()(或者Arrays.copyOfRange)和clone()方法。下面分別介紹一下這幾種拷貝。 迴圈拷貝(速度相對比較慢) 迴圈拷貝其實沒什麼好說的啦,就是用

java許可權修飾符,靜態程式碼塊,構造程式碼塊,構造方法執行順序。

一、java中類有四種許可權 1、要想僅能在本類中訪問使用private修飾。 2、要想本包中的類都可以訪問不加修飾符即可。 3、要想本包中的類與其他包中的子類可以訪問使用protected修飾。(不在同一包中時,只能在子類裡面可以呼叫,其他測試類建物件都不行,只給不同包中的子

JAVA常見建立物件方法

一、使用new關鍵字 這是我們最常見的也是最簡單的建立物件的方式,通過這種方式我們還可以呼叫任意的夠贊函式(無參的和有參的)。 比如:Student student = new Student(); 二、呼叫物件的clone的方法 無論何時我們呼叫一

JS幾陣列遍歷方式和效能分析對比

JS陣列遍歷的幾種方式 JS陣列遍歷,基本就是for,forin,foreach,forof,map等等一些方法,以下介紹幾種本文分析用到的陣列遍歷方式以及進行效能分析對比 第一種:普通for迴圈 程式碼如下: for(j = 0; j < arr.length; j++) { }

Java排序方法及99乘法口訣表

import java.util.Arrays; public class Sort { /**排序 * @param args */ public static void main(String[] args) { int array[]={12,3