關於java陣列拷貝的效能
java 提供的System.arrayCopy()方法比自己寫的陣列copy要快.
檢視其原始碼:
- publicstaticnativevoid arraycopy(Object src, int srcPos,
- Object dest, int destPos,
- int length);
可以看到被定義為native方法...速度比自己寫的普通方法要快.
在jdk1.6中加入了新的陣列拷貝方法.Arrays.copyOfRange().
其原始碼:
- publicstaticbyte[] copyOfRange(
- int newLength = to - from;
- if (newLength < 0)
- thrownew IllegalArgumentException(from + " > " + to);
- byte[] copy = newbyte[newLength];
- System.arraycopy(original, from, copy, 0,
- Math.min(original.length - from, newLength));
- return
- }
其實就是System.arraycopy..暈死.
別為做的測試:
- /*******************************************************************************
- *
- * 比較賦值與System.arraycopy誰快
- *
- * 複製的內容越多,System.arraycopy優勢更明顯
- *
- * Author: NeedJava
- *
- * Modified: 2007.09.16
- *
- ******************************************************************************/
- publicfinalclass WhoFaster
- {
- publicstaticvoid main( String[] args )
- {
- /*/
- int begin=100;
- int length=12;
- String temp="12345678901234567890"
- +"12345678901234567890"
- +"12345678901234567890"
- +"12345678901234567890"
- +"12345678901234567890"
- +"黑客帝國忍者神龜變形金剛"
- +"12345678901234567890"
- +"12345678901234567890"
- +"12345678901234567890"
- +"12345678901234567890"
- +"12345678901234567890";
- int times=10000000; //千萬
- /*/
- int begin=100;
- int length=120;
- String temp="12345678901234567890"
- +"12345678901234567890"
- +"12345678901234567890"
- +"12345678901234567890"
- +"12345678901234567890"
- +"黑客帝國忍者神龜變形金剛"
- +"黑客帝國忍者神龜變形金剛"
- +"黑客帝國忍者神龜變形金剛"
- +"黑客帝國忍者神龜變形金剛"
- +"黑客帝國忍者神龜變形金剛"
- +"黑客帝國忍者神龜變形金剛"
- +"黑客帝國忍者神龜變形金剛"
- +"黑客帝國忍者神龜變形金剛"
- +"黑客帝國忍者神龜變形金剛"
- +"黑客帝國忍者神龜變形金剛"
- +"12345678901234567890"
- +"12345678901234567890"
- +"12345678901234567890"
- +"12345678901234567890"
- +"12345678901234567890";
- int times=1000000; //百萬
- //*/
- char[] oldArray=temp.toCharArray();
- char[] newArray=null;
- long start=0L;
- ////////////////////////////////////////////////////////////////////////////
- //
- // 單純賦值
- //
- ////////////////////////////////////////////////////////////////////////////
- newArray=newchar[length];
- start=System.currentTimeMillis();
- for( int i=0; i<times; i++ )
- {
- for( int j=0; j<length; j++ )
- {
- newArray[j]=oldArray[begin+j];
- }
- }
- System.out.println( new String( newArray )+" "+( System.currentTimeMillis()-start ) );
- ////////////////////////////////////////////////////////////////////////////
- //
- // System.arraycopy
- //
- ////////////////////////////////////////////////////////////////////////////
- newArray=newchar[length];
- start=System.currentTimeMillis();
- for( int i=0; i<times; i++ )
- {
- System.arraycopy( oldArray, begin, newArray, 0, length );
- }
- System.out.println( new String( newArray )+" "+( System.currentTimeMillis()-start ) );
- }
- }
其結論:
在第一種情況,迴圈千萬,一個900,一個1000,兩者相差100毫秒
第二種情況就拉大了,迴圈千萬,一個6700,一個2200,相差4500毫秒
為防止JVM將字元陣列作為常量儲存在記憶體中,我分別遮蔽執行,效果一樣。
也就是說,對於很短的字串複製,單純賦值略快,可以忽略
對於很長的字串複製,用單純賦值就是髒程式碼
相關推薦
關於java陣列拷貝的效能
java 提供的System.arrayCopy()方法比自己寫的陣列copy要快. 檢視其原始碼: publicstaticnativevoid arraycopy(Object src, int srcPos,
JAVA陣列拷貝
陣列的四種拷貝方式 一丶for迴圈拷貝 public class Demo1 { private int val = 10; public void setVal(int val) { this.val = val; } public in
Java陣列拷貝方法arraycopy()
java.lang.System類的arraycopy()方法提供了陣列元素複製功能——將一個數組的連續多個元素的值批量複製到另一個數組中去。 例如://源陣列 int source[] = {1,2,3,4,5}; //目的陣列
【效率優化專題】2.java陣列拷貝的3種方式和效率對比
Java語言中常用的陣列拷貝方式有:for迴圈拷貝,通過Arrays.copyOf()方法,System.arraycopy和clone()方法拷貝。1 測試場景我們用最簡單的整數陣列來測試。首先建立一個整型陣列,並且初始化資料。然後分別用這3種方式來拷貝陣列同樣的次數。來測分別試這三種情況的效率。1.1 初
Java陣列/集合效能優化
1、 複製陣列元素,使用System類arraycopy()方法替代迴圈賦值在陣列之間複製元素 建議:System類arraycopy()方法複製陣列元素 杜絕:迴圈賦值複製陣列元素 原因
Java陣列拷貝/複製的效率比較
今天在研究Jlibrtp程式碼時,偶然注意到裡面大量使用了System.arraycopy()這個方法,心想既然是協議實現,那用的方法肯定都是效率最高或較高的了,以前對這個System.arraycopy()僅有個抽象的認識。另外,JDK中對ArrayList的add與remove方法的實現,居然也是用的S
java陣列拷貝哪個效率高
之前看到很多問題以及很多部落格都有討論java陣列拷貝的效率問題,一般都是討論如下幾種方法 int[] b=a.clone(); System.arraycopy(a, 0, b, 0, n); int[] b=Arrays.copyOf(a, n); int[] b
java陣列的四種拷貝方法的效能分析:for、clone、System.arraycopy、Arrays.copyof
今天作者就Java陣列的拷貝方法進行效能比較,多有不足,請大家指正!!! 1.for方法,用迴圈依次實現陣列元素的拷貝。 2.clone方法,是Object類的方法,用來實現物件的複製操作。 3.System.arraycopyof方法,是System的靜態方法,是一個na
2.Java陣列_一維陣列二維陣列的動態初始化與靜態初始化、方法接收/返回/修改陣列、java對陣列的排序/全拷貝/部分拷貝
Java陣列----引用資料型別,必須在使用前先初始化;否則會nullPointerException(執行時異常)。 (引用傳遞:多個棧記憶體指向同一塊堆記憶體) 1.一維陣列初始化 (1)動態初始化(宣告並開闢陣列) 資料型別[] 陣列名稱 = new 資料型別[長度]; 如
Java——陣列的拷貝
1.for迴圈拷貝: int[] array={1,2,3,4,5}; int[] brray=new int[array.length]; for(int i=0;i<array.length;i++) {
Java.util.Arrays 與 陣列拷貝
Java.util.Arrays java.util.Arrays類中提供了許多實用的方法,可用於陣列的複製、排序等操作處理。 以下是常用的方法和屬性: Arrays.sort() 序列排序: 原始碼: public static void sort(int[]
java物件拷貝——PropertyUtils copyProperties 用法和效能
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
java陣列的四種拷貝方式
拷貝陣列方式 深拷貝/淺拷貝 是否產生新的物件 備註 for迴圈拷貝 淺拷貝 否 拷貝速度最慢 clone拷貝陣列
java 屬於也是可以 arr1= arr2,陣列拷貝 兩個變數將引用同一個陣列
package javacore; /** * @author lixw * @date created in 12:02 2018/12/17 */ public class ArrayTest { public static void main(String[] args
java:IO流(位元組陣列拷貝之available()方法---不推薦使用)
* int read(byte[] b):一次讀取一個位元組陣列 * write(byte[] b):一次寫出一個位元組陣列 * available()獲取讀的檔案所有的位元組個數 import ja
JAVA中拷貝陣列
JAVA中拷貝部分陣列 陣列部分拷貝:指將陣列中一部分內容替換掉另一陣列中 的部分內容(必須是連續的)。 在java.lang.System(預設無需說明)中的System.arraycopy(源陣列名稱,源陣列開始點,目標陣列名稱,目標陣列開始點,拷貝長度);
Java陣列拼接字串幾個寫法效能比較
將陣列 int[] arr = {0,1,2,3,4,5,6,7,8,9} 拼接成 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 字串: StringBuilder sb = new StringBuilder(arr.length*3); // Stri
Java 陣列 淺拷貝與深拷貝
http://www.cppblog.com/baby-fly/archive/2010/11/16/133763.html 定義一個數組int[] a={3,1,4,2,5}; int[] b=a; 陣列b只是對陣列a的又一個引用,即淺拷貝。如果改變陣列b中元素的值
Java陣列物件的深拷貝
ArrayList<Cell> cells = ArrayList<Cell>(); ArrayList<Cell> init_cells = new ArrayList<Cell>(); init_cells = (Array
java 陣列的拷貝 物件陣列的拷貝 System.arraycopy函式
/*java 陣列的操作 System類的arraycopy靜態函式用於陣列拷貝 陣列是不能越界的 物件陣列的複製實際上是複製的引用的拷貝 也就是物件的地址 */class Point{ int x; int y; Point(int x,int y) {