import java.util.Arrays;
//以下的代码 主要是关于数组复制的四种方法的讨论
public class P_11_27 {
public static int [] copy(int [] array){
int [] copy = new int[array.length]; // new一个新的数组的长度等于原来的数组 若长度大于后面是 “0” 若小于则会损失
for (int i = 0; i < array.length; i++) { // 对数组进行遍历
copy [i] = array[i]; // 赋值
}
return copy; // 将替换好的数组进行返回
}
//第一种采用自己写的一个来进行 复制
public static void main1(String[] args) {
int [] array = { 1 , 2 , 3 , 4 , 5 , 6 };
int [] ret = copy(array); // 见一个新的变量 来接收返回值;
System.out.println(Arrays.toString(ret)); // 采用Arrays.toString 的方式来进行数组的打印
}
//第二种方式直接进行函数的调用 利用Java所带的 数组的拷贝工具
// Arrays.copyOf(arrray,array.length) 而这个数组的长度的值可以被改变 改变之后参考上一个函数
public static void main2(String[] args) {
int [] array = { 1 , 2 , 3 , 4 , 5 , 6 };
int [] ret = Arrays.copyOf(array ,array.length);
int [] ret2 = Arrays.copyOfRange(array,1,5);// 代表的按照下标进行复制 range 你懂得
System.out.println(Arrays.toString(ret));
}
// 第三种方式直接使用 arraycopy(object src , int srcpos , object dest , int destpos ,array.length)
//src : 你要拷贝的数组;
//srcpos:你所要拷贝的数组,所想要开始的下标。
//dest: 目标函数; destpos 的含义 pos 与上面的对应 则可完整的复制 当然也可以进行更改
//注意此时的函数长度 必须与原函数的长度相等 否则会进行报错。
//destpos 之中有一个 native 方法叫做本地方法 这个方法是由c++进行编写不可以查看源代码 速度非常之快;
// public static native void arraycopy (Object src, int srcPos,Object dest , int destPos
// int array.legth);
public static void main3(String[] args) {
int [] array ={ 1 , 2 , 3 , 5 } ;
int [] copy = new int[array.length];
System.arraycopy(array,0,copy,0,array.length);
System.out.println(Arrays.toString(copy));
}
//第四种的方式 clone 方式
public static void main(String[] args) {
int [] arr ={ 1 , 2 , 3 , } ;
int [] copy = arr.clone();//此时相当于将目标的数组的地址进行备份;并且需要一个新的变量来接收新的地址
System.out.println(Arrays.toString(copy));//此时直接打印即可;
}
}