陣列複製的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...