数组的拷贝
System类里也包含了一个static void arraycopy(object src,int srcpos,object dest, int destpos,int length)方法,该方法可以将src数组里的元素值赋给dest数组的元素,其中srcpos指定从src数组的第几个元素开始赋值,length参数指定将src数组的多少个元素赋给dest数组的元素。
注:容器的底层元素的拷贝,实际上也是数组的拷贝。
【示例7-9】数组拷贝
public class Test {
public static void main(String args[]) {
String[] s = {"阿里","尚学堂","京东","搜狐","网易"};
String[] sBak = new String[6];
System.arraycopy(s,0,sBak,0,s.length);
for (int i = 0; i < sBak.length; i++) {
System.out.print(sBak[i]+ "\t");
}
}
}
执行结果如图7-5所示:
代码示例:
package test;
/**
* 测试数组的拷贝
*/
public class Test {
public static void main(String[] args) {
//testBasicCopy();
//testBasicCopy2();
String[] str = {"阿里", "京东", "百度", "腾讯", "微软"};
//removeElement(str, 1); //删除京东
str = extendRange(str);
}
public static void testBasicCopy() {
String[] s1 = {"aa","bb","cc","dd","ee"};
String[] s2 = new String[10];
/**
* System.arraycopy(src, srcPos, dest, destPos, length);
* 参数的意义:从src数组的第srcPos下标开始拷贝,拷贝到dest数组(从destPos下标开始粘贴),拷贝length个长度的元素
*/
System.arraycopy(s1, 2, s2, 6, 3);
for(int i = 0; i < s2.length; i++) {
System.out.println(i+"--"+s2[i]);
}
}
//测试从数组中删除某个元素(cc)(本质上还是数组的拷贝)(或者可以把String[] s2省略,所有的s2改为s1,结果为aa,bb,dd,ee,ee
public static void testBasicCopy2() {
String[] s1 = {"aa","bb","cc","dd","ee"};
String[] s2 = new String[5];
System.arraycopy(s1, 3, s2, 3-1, s1.length-3);
//s1[s1.length-1] = null; //把s1的最后一个元素设为空
for(int i = 0; i < s2.length; i++) {
System.out.println(i+"--"+s2[i]);
}
}
//删除数组中指定索引位置的元素,并将原数组返回(插入和删除类似,只需要调整索引的位置)
public static String[] removeElement(String[] s, int index) {
String[] s2 = new String[5];
System.arraycopy(s, index+1, s, index, s.length-index-1);
s[s.length-1] = null;
for(int i = 0; i < s.length; i++) {
System.out.println(i+"--"+s[i]);
}
return s;
}
//数组扩容(本质上是定义一个更大的数组,然后将原数组内容原封不动的拷贝到新数组中)
public static String[] extendRange(String[] s1) {
//String[] s1 = {"aa","bb","cc"}; //数组只能定义一次,长度不能变了
String[] s2 = new String[s1.length + 10];
//将s1中的所有元素都拷贝到s2中
System.arraycopy(s1, 0, s2, 0, s1.length);
for(String temp : s2) {
System.out.println(temp);
}
return s2;
}
}