【Java】--几种简单方法实现数组拷贝
程序员文章站
2024-02-26 18:19:28
...
参考链接:https://blog.csdn.net/u011669700/article/details/79323251
最简单的办法直接一个for循环走完拷贝一遍:
import java.util.Arrays;
public class copy_arr_use_for {
public static void main(String[] args) {
int[] arr = {11,22,33,44,55,66,77,88,99};
int[] new_arr = new int[arr.length];
for (int i=0; i < arr.length; i++) {
new_arr[i] = arr[i];
}
System.out.println("arr: " + Arrays.toString(arr));
System.out.println("new_arr: " + Arrays.toString(new_arr));
}
}
除此之外还可以直接调用函数,这样比较方便简洁。
以下方法经如下链接中的方法所实现,参考链接:https://blog.csdn.net/u011669700/article/details/79323251
/*
本文引用的四种拷贝数组的方法:clone()、System.arraycopy()、Arrays.copyOf()、Arrays.copyOfRange()
*
*/
import java.util.Arrays;
public class copy_arrays {
public static void main(String[] args) {
//①clone()方法拷贝数组
int a1[] = {1, 3};
//a2在a1未改变之前就将其拷贝
int a2[] = a1.clone();
//此函数只起到输出作用
clone_arr(a1, a2);
System.out.println("数组a1: " + Arrays.toString(a1));
//数组a1也会改变,因为在void函数clone_arr()中, 数组a指向a1,所以改变a[0],a1[0]也会随之改变
System.out.println();
String[] s1 = {"aa", "bb"};
//clone()方法拷贝数组,a2在a1未改变之前就将其拷贝
String[] s2 = s1.clone();
//此函数只起到输出作用
clone_arr(s1, s2);
System.out.println();
//②System.arraycopy()方法拷贝数组,具体用法在该函数体内
System_arraycopy();
System.out.println();
//③Arrays.copyOf方法拷贝数组,具体用法在该函数体内
//Arrays.copyOf底层也是用的System.arraycopy
Arrays_copyOf();
System.out.println();
//④Arrays.copyOfRange()方法
//Arrays.copyOfRange底层其实也是用的System.arraycopy,只不过封装了一个方法
Arrays_copyOfRange();
}
//①clone()方法拷贝int型数组
public static void clone_arr(int[] a, int[] b) {
a[0] =666;//改变a[0]的值
System.out.println("数组a: " + Arrays.toString(a));
//[666, 3]
System.out.println("经过clone()方法拷贝的数组b: " + Arrays.toString(b));
//[1, 3]
}
//使用多态,并且使用clone()方法拷贝String数组
public static void clone_arr(String[] a, String[] b) {
a[0] = "sss";
System.out.println("数组a: " + Arrays.toString(a));
System.out.println("经过clone()方法拷贝的数组b: " + Arrays.toString(b));
}
//②使用System.arraycopy()方法拷贝数组
public static void System_arraycopy() {
int[] a1 = {1,2,3,4,5};
int[] a2 = new int[a1.length];
//使用方法:(原数组, 原数组开始位置, 目标数组, 目标数组开始位置)
System.arraycopy(a1, 0, a2, 0, a1.length);
System.out.println("数组a1: " + Arrays.toString(a1));
System.out.println("经过System.arraycopy()方法拷贝的数组a2: " + Arrays.toString(a2));
}
//③使用Arrays.CopyOf()方法拷贝数组:
public static void Arrays_copyOf() {
int[] a1 = {1,2,3,4,5};
//使用方法:(原数组,拷贝的个数),使用该方法时无需使用new关键字对对象进行内存分配
int[] a2 = Arrays.copyOf(a1, 3);
int[] a3 = Arrays.copyOf(a1, 5);
System.out.println("数组a1: " + Arrays.toString(a1));
System.out.println("经过Arrays.copyOf()方法拷贝的数组a2:" + Arrays.toString(a2));
System.out.println("经过Arrays.copyOf()方法拷贝的数组a3:" + Arrays.toString(a3));
}
//④使用Arrays.copyOfRange()方法拷贝数组:
public static void Arrays_copyOfRange() {
int[] a1 = {1,2,3,4,5,6};
//使用方法:(原数组,开始位置,拷贝的个数),使用该方法时无需使用new关键字对对象进行内存分配
int[] a2 = Arrays.copyOfRange(a1, 0, 3);
System.out.println("数组a1: " + Arrays.toString(a1));
System.out.println("经过Arrays.copyOfRange()方法拷贝的数组a2: " + Arrays.toString(a2));
}
}