java数组复制

讲java的数组复制要从java的变量传递类型讲起。

java的变量传递分为值传递和引用传递。

基本数据类型的赋值是值传递,数组以及Class的的赋值是引用传递。


当我想保存数组a时,习惯性的采取了

<pre name="code" class="java">int[]  a = {1,2,3}
int[]  b = a;

 因为数组的赋值是引用传递,所以a,b是指向同一块表示该数组内存地址 

对a的操作,会影响到b的值,所以并没有起到保存a的作用。

对于一维数组来说,可以用

int[]  a = {1,2,3}
int[]  b = a.clone();

这样a,b分别指向不同的内存区域,并且此时他们的值也是一样的。

对于多维数组,

int[][] a = {{1,2,3},{4,5,6}};
int [][] b = a.clone();

事实上,并没有起到作用,因为在java底层实现中多维数组是数组中的数组。因为这段的代码只是让a,b指向了不同的内存区域,假设为A,B,但A,B却又共同指向了里层数组arr1,arr2。

正确的代码是

public int[][] copy2DArr(int[][] a) {
		int[][] b = new int[a.length][2];
		for (int i = 0; i < a.length; i++) {
			b[i] = a[i].clone();
		}
		return b;
	}



所以调用clone()的对象一定要是代表多维数组最里层的的数组对象


### Java 数组复制的方式 Java 提供了多种方式来完成数组复制操作。以下是常见的五种方法及其具体实现: #### 1. 使用循环逐个赋值 通过手动遍历源数组并将每个元素逐一赋给目标数组,这是最基础的方法之一。 ```java public static void method01(int[] arr, int[] ans) { for (int i = 0; i < arr.length; i++) { ans[i] = arr[i]; } System.out.println("复制的ans数组为 " + Arrays.toString(ans)); } ``` 这种方法简单易懂,但在性能上可能不如其他内置方法高效[^1]。 #### 2. 使用 `Arrays.copyOf()` 方法 `Arrays.copyOf()` 是一种便捷的方式来创建一个新的数组并将其初始化为目标数组的内容。此方法支持指定新数组的长度,从而允许扩展或缩减数组大小。 ```java int[] original = {1, 2, 3, 4, 5}; int[] copy = Arrays.copyOf(original, original.length); System.out.println(Arrays.toString(copy)); ``` 该方法适用于快速复制整个数组或者调整其容量[^2]。 #### 3. 使用 `Arrays.copyOfRange()` 方法 如果只需要复制数组的一部分,则可以使用 `copyOfRange()` 来定义起始索引和结束索引之间的子集。 ```java int[] original = {1, 2, 3, 4, 5}; int[] subCopy = Arrays.copyOfRange(original, 1, 4); // 复制从索引1到索引3(不包括索引4) System.out.println(Arrays.toString(subCopy)); // 输出 [2, 3, 4] ``` 这种方式特别适合于处理部分数据的需求。 #### 4. 使用 `System.arraycopy()` 方法 `System.arraycopy()` 是一个底层高效的工具函数用于执行批量的数据移动。它可以直接控制源位置、目标位置以及复制的数量。 ```java int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = new int[10]; System.arraycopy(arr1, 0, arr2, 0, arr1.length); System.out.println(Arrays.toString(arr2)); // 输出 [1, 2, 3, 4, 5, 0, 0, 0, 0, 0] ``` 相比简单的循环,这个方法通常更加快速且优化良好[^3]。 #### 5. 使用 `clone()` 方法 任何实现了 `Cloneable` 接口的对象都可以调用 `clone()` 方法生成一份浅拷贝副本。对于基本类型的数组来说,这同样是一个有效的选项。 ```java int[] original = {1, 2, 3, 4, 5}; int[] clonedArray = original.clone(); System.out.println(Arrays.toString(clonedArray)); ``` 需要注意的是,当涉及对象数组时,克隆仅会复制引用而不会深拷贝实际对象实例[^4]。 以上就是 Java 中常用的几种数组复制技术,每种都有各自的适用场景和特点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值