在Java中,如果要複製兩個陣列的內容,除了動手寫迴圈,一個一個陣列元素慢慢複製外,還有更懶的方法嗎?答案是有的,在Java的System類別中,裡面有一個arraycopy的method,只要呼叫這個method,就可以輕易地幫您複製整個函式了。

而讓我們看一下這個method怎麼用。

System.arraycopy(src, srcPos, dest, destPos, length)

其中,src是指來源陣列,dest是指目標陣列。

而srcPos則是指來源陣列的開始位置,destPos則是指目標陣列的開始位置,length則是指要複製的陣列長度。

如果您要完整地複製陣列,那麼只要使用這個method,就可以輕鬆地幫你辦到了喔!

PS:dest陣列要先配置空間喔,如以下程式碼:

int dest[] = new int[src.length];

另一種方法則是使用System類別中的arraycopy這個method,不過他要填入五個參數,對於懶人的程式設計師來說,這參數也未免太多了吧,而且又是在System類別中,誰知道他會藏在那呢?為什麼不集中在Arrays這個類別中呢?

而在Java 1.6版之後,Arrays這個類別中,引進了陣列複製的method,他叫做copyOf,先來看他的method怎麼用吧。

Arrays.copyOf(src, length)

其中,src是指來源陣列,length則是指複製的長度。

而這個method非常有趣,他的length是隨便您填,舉例而言,如果您的來源陣列長度是5,而你只要複製前4個元素,您只要在length輸入4即可,但若是您填超過5,那麼他剩下的便會以預設值顯示。

舉例而言:

int array1[] = {1,2,3,4,5};
int array2[];
array2 = Arrays.copyOf(array1, array1.length-1);

此時array2的內容為{1,2,3,4}。

int array1[] = {1,2,3,4,5};
int array2[];
array2 = Arrays.copyOf(array1, 7);

此時array2的內容為{1,2,3,4,5,0,0}。

所以,如果要複製整個陣列的話,可以想見只要打以下程式碼即可。

int array1[] = {1,2,3,4,5};
int array2[];
array2 = Arrays.copyOf(array1, array1.length);

這個可以說是非常方便地複製整個陣列的method。

最後一個要介紹的方法則是Arrays類別中的copyOf method。在Java 1.6版之後,在Arrays類別底下另外還提供copyOfRange這個method,不同於copyOf這個method,copyOfRange可以讓您自由地選擇範圍複製。

而他的函式原型如下:

Arrays.copyOfRange(src, from, to)

其中from和to分別代表陣列的索引值,換言之,「to-from」則是複製的個數。

至於怎麼使用呢?舉個例子來說明。

int array1[] = {1,2,3,4,5};
int array2[];
array2 = Arrays.copyOfRange(array1, 1, 4);

則array2的內容會是{2,3,4}

因為我們曾經提過,「to-from」為複製的個數,所以在這裡的複製個數即為3,複製範圍則從 array1[1] 開始。

總結來說,copyOfRange 比 copyOf 這個method更有彈性,但 copyOf 這個則是length的長度可以自由設定,超過原陣列的長度則是補陣例的預設值,您可以選擇一個適合您要用的method來使用他。

Written by 

城市裡的小小迷僮工程師,喜歡用鍵盤記錄個人生活的點滴,身邊的人事物都我的靈感,用心踏出每個腳步,用文字灌溉《海芋小站》,用專業解決問題。

發表迴響