1.Object.clone()
簡單直接,只能對源數組完整地復制
2.Arrays.copyOf(T[] original, int newLength)
可以只復制源數組中部分元素,但復制的起始位置固定為0
3.Arrays.copyOfRange(T[] original, int from, int to)
可以指定復制的起始位置
4.System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
復雜,但可以將源數組中的部分元素復制到目標數組的指定位置(此方法最靈活,可實現上述1、2、3的功能)
1、2、3都具有一定的局限性(返回一個新的數組,無法將源數組中的元素復制到已存在的數組中),
故合並數組的操作只能通過System.arraycopy來完成,以下為示例:
JApp.java
import static java.lang.System.out; import java.lang.reflect.Array; public class JApp { //沒有使用Java中預定義的函數 // private static int[] mergeArrays(int[]... arrays) { // int lengthOfNewArray = 0; // for (int i = 0; i < arrays.length; ++i) { // lengthOfNewArray += arrays[i].length; // } // int[] newArray = new int[lengthOfNewArray]; // int index = 0; // for (int[] array : arrays) { // for (int i : array) { // newArray[index++] = i; // } // } // return newArray; // } private static <T> T[] mergeArrays(T[]... arrays) { int lengthOfNewArray = 0; for (int i = 0; i < arrays.length; ++i) { lengthOfNewArray += arrays[i].length; } //使用(T[])Array.newInstance(...)可避免(T[])new Object[...]引發的ClassCastException T[] newArray = (T[]) Array.newInstance(arrays[0].getClass().getComponentType(), lengthOfNewArray); int destPos = 0; for (int i = 0; i < arrays.length; ++i) { System.arraycopy(arrays[i], 0, newArray, destPos, arrays[i].length); destPos += arrays[i].length; } return newArray; } private static int[] mergeArrays(int[]... arrays) { int lengthOfNewArray = 0; for (int i = 0; i < arrays.length; ++i) { lengthOfNewArray += arrays[i].length; } int[] newArray = new int[lengthOfNewArray]; int destPos = 0; for (int i = 0; i < arrays.length; ++i) { System.arraycopy(arrays[i], 0, newArray, destPos, arrays[i].length); destPos += arrays[i].length; } return newArray; } public static void main(String[] args) { int[] ints1 = {0, 1, 2, 3, 4}; int[] ints2 = {5, 6, 7, 8, 9}; int[] ints3 = {10, 11, 12, 13, 14}; int[] buffer = new int[ints1.length + ints2.length + ints3.length]; for (int i : buffer) { out.print(i + " "); } out.println(); System.arraycopy(ints1, 0, buffer, 0, ints1.length); System.arraycopy(ints2, 0, buffer, ints1.length, ints2.length); System.arraycopy(ints3, 0, buffer, ints1.length + ints2.length, ints3.length); for (int i : buffer) { out.print(i + " "); } out.println(); int[] array = mergeArrays(ints1, ints2, ints3); for (int i : array) { out.print(i + " "); } out.println(); Object[] objects = mergeArrays(new Object[]{"a", "b", "c"}, new Object[]{"D", "E"}, new Object[]{"測試", "Bu Ish", "布衣食"}); for (Object o : objects) { out.print(o + "、"); } out.println(); String[] strings = mergeArrays(new String[]{"a", "b", "c"}, new String[]{"D", "E"}, new String[]{"測試", "Bu Ish", "布衣食"}); for (String s : strings) { out.print(s + "、"); } out.println(); } }