[Java] 陣列的複製方法

在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來使用他。

Subscribe
Notify of
guest

2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
張家男
張家男
4 years ago

int array1[] = {1,2,3,4,5};
int array2[];
array2 = Arrays.copyOfRange(array1, 1, 4);
不懂為何輸入4得到的會是2,3,4。
請問那個4是怎麼來的??
是[ 到那個數字停止 ] 的意思嗎? 謝謝海芋 !