|
Posted on 2009-07-12 23:28 Gavin.lee 閱讀(2236) 評論(0) 編輯 收藏 所屬分類: java SE & EE
arraycopy-------From JDK6.0
public static void arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length)
- 從指定源數組中復制一個數組,復制從指定的位置開始,到目標數組的指定位置結束。從
src 引用的源數組到 dest 引用的目標數組,數組組件的一個子序列被復制下來。被復制的組件的編號等于 length 參數。源數組中位置在 srcPos 到 srcPos+length-1 之間的組件被分別復制到目標數組中的 destPos 到 destPos+length-1 位置。
如果參數 src 和 dest 引用相同的數組對象,則復制的執行過程就好像首先將 srcPos 到 srcPos+length-1 位置的組件復制到一個帶有 length 組件的臨時數組,然后再將此臨時數組的內容復制到目標數組的 destPos 到 destPos+length-1 位置一樣。
If 如果 dest 為 null ,則拋出 NullPointerException 異常。
如果 src 為 null , 則拋出 NullPointerException 異常,并且不會修改目標數組。
否則,只要下列任何情況為真,則拋出 ArrayStoreException 異常并且不會修改目標數組:
src 參數指的是非數組對象。
dest 參數指的是非數組對象。
src 參數和 dest 參數指的是那些其組件類型為不同基本類型的數組。
src 參數指的是具有基本組件類型的數組且 dest 參數指的是具有引用組件類型的數組。
src 參數指的是具有引用組件類型的數組且 dest 參數指的是具有基本組件類型的數組。
否則,只要下列任何情況為真,則拋出 IndexOutOfBoundsException 異常,并且不會修改目標數組:
srcPos 參數為負。
destPos 參數為負。
length 參數為負。
srcPos+length 大于 src.length ,即源數組的長度。
destPos+length 大于 dest.length ,即目標數組的長度。
否則,如果源數組中 srcPos 到 srcPos+length-1 位置上的實際組件通過分配轉換并不能轉換成目標數組的組件類型,則拋出 ArrayStoreException 異常。在這種情況下,將 k 設置為比長度小的最小非負整數,這樣就無法將 src[srcPos+ k] 轉換為目標數組的組件類型;當拋出異常時,從 srcPos 到 srcPos+ k-1 位置上的源數組組件已經被復制到目標數組中的 destPos 到 destPos+ k-1 位置,而目標數組中的其他位置不會被修改。(因為已經詳細說明過的那些限制,只能將此段落有效地應用于兩個數組都有引用類型的組件類型的情況。)
-
- 參數:
src - 源數組。
srcPos - 源數組中的起始位置。
dest - 目標數組。
destPos - 目標數據中的起始位置。
length - 要復制的數組元素的數量。
- 拋出:
IndexOutOfBoundsException - 如果復制會導致對數組范圍以外的數據的訪問。
ArrayStoreException - 如果因為類型不匹配而使得無法將 src 數組中的元素存儲到 dest 數組中。
NullPointerException - 如果 src 或 dest 為 null 。
package com.Gavin.tools;

 public class CopyArray {

 public static void main(String[] args) {
 int elements[] = { 1, 2, 3, 4, 5, 6 };
 int hold[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
int result[] = new int[16];
//數組累加
System.arraycopy(elements, 0, result, 0, elements.length);
System.arraycopy(hold, 0, result, elements.length, hold.length);
for (int i = 0; i < result.length; i++)
System.out.println("result[" + i + "]=" + result[i]);
//自復制
System.arraycopy(elements, 0, elements, 1, 1);
for (int i = 0; i < elements.length; i++)
System.out.println("elements[" + i + "]=" + elements[i]);

//覆蓋累加
System.arraycopy(elements, 0, hold, 0, elements.length);
for (int i = 0; i < hold.length; i++)
System.out.println("hold[" + i + "]=" + hold[i]);
}
}

|