在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);
此時 array 2的內容為 {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」則是複製的個數,舉例來說.若「to」是4,「from」是1,則複製的個數是3
至於怎麼使用呢?舉個例子來說明。
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來使用他。
int array1[] = {1,2,3,4,5};
int array2[];
array2 = Arrays.copyOfRange(array1, 1, 4);
不懂為何輸入4得到的會是2,3,4。
請問那個4是怎麼來的??
是[ 到那個數字停止 ] 的意思嗎? 謝謝海芋 !
copyOfRange 只包含 from 不包含 to,所以以本例來說,從 index =1 開始複製,到 index = 4 就停止了,所以不會複製到 index = 4 的物件