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();
}
}

最新文章

  1. August 26th 2016 Week 35th Friday
  2. BZOJ3672 : [Noi2014]购票
  3. php socket通信(tcp/udp)
  4. js生成验证码
  5. C#基础-可访问性-public、ptotected、protected internal、internal、private
  6. UVa 11039 (排序+贪心) Building designing
  7. Notes of the scrum meeting(10/28)
  8. list、tuple、dict、set、map
  9. Microsoft Office Visio Professional 2007密钥
  10. postgres常用类型
  11. html禁止手机页面放大缩小
  12. [LeetCode]题解(python):132-Palindrome Partitioning II
  13. ASP.NET初始化流程分析2
  14. 将python文件打包成exe可运行文件
  15. C# -- 随机数(Random)的使用
  16. 验证代理ip是否可用
  17. 17. 判断是否IE浏览器
  18. django之Model类
  19. JAVA中线程池的简单使用
  20. 利用django.core.mail发送QQ邮件的配置

热门文章

  1. 【bzoj4408】[Fjoi 2016]神秘数 主席树
  2. BZOJ3572 [Hnoi2014]世界树 【虚树 + 树形dp】
  3. 【二叉搜索树】hdu 3791
  4. hdu 4819 Mosaic 树套树 模板
  5. Nk 1430 Divisors(因子数与质因数)
  6. 【Codeforces Round #503 (Div. 2)】
  7. vs2005做的留言本——天轰川下载
  8. 某考试 T1 sigfib
  9. JDBC自定义连接池
  10. 【paddle学习】识别数字