陣列複製原始碼分析效率對比

2021-09-19 04:44:38 字數 1131 閱讀 8114

陣列複製的5種方法原始碼分析

3.arrays.copyof()方法

4.arrays.copyofrange()

5.object.clone()方法

6.總結

1.for迴圈方法

乙個乙個複製,**效率低。

2.system.arraycopy()方法

方法使用native關鍵字修飾,為原生方法,效率高。原始碼如下:

public static native void arraycopy(object src,  int  srcpos,

object dest, int destpos,

int length);

引數說明

src 源陣列

srcpos 源陣列的開始位置

dest 目的陣列

destpos 目的陣列的開始位置

length 複製的長度

3.arrays.copyof()方法

arrays.copyof()是個過載函式,但是每個函式都是呼叫如下的方法:

public static t copyof(u original, int newlength, class<? extends t> newtype)
引數說明

original 源陣列

from 複製開始的位置

to 複製結束點

newtype 陣列型別

5.object.clone()方法

陣列複製同樣也是原生方法,原始碼如下

protected native object clone() throws clonenotsupportedexception;
返回值

返回object,所以需要用強轉,效率只比for迴圈快。

6.總結

效率對比排名

system.arraycopy() 只用使用引數陣列,不需要新建陣列實現,無返回值

arrays.copyof()與 arrays.copyofrange() 需要新建陣列,返回新陣列

object.clone() 返回object,所以需要用強轉,所以比較慢

for迴圈

memset 的效率以及原始碼分析

void memset void s,int ch,size t n 作用 將s所指向的某一塊記憶體中的每個位元組的內容全部設定為ch指定的ascii值,塊的大小由第三個引數指定,這個函式通常為新申請的記憶體做初始化工作。不知道有沒有像我一樣把memset當作萬能的初始化工具,例如 int arr ...

memset 的效率以及原始碼分析

void memset void s,int ch,size t n 作用 將s所指向的某一塊記憶體中的每個位元組的內容全部設定為ch指定的ascii值,塊的大小由第三個引數指定,這個函式通常為新申請的記憶體做初始化工作。不知道有沒有像我一樣把memset當作萬能的初始化工具,例如 int arr ...

原始碼分析foreach效率比for迴圈高

首先看看php原始碼變數值儲存 typedef union zvalue value str hashtable ht hash table value zend object value obj zvalue value php陣列的值儲存在zvalue value.ht裡面,它是乙個hashta...