Java中数组的5种拷贝方法

在这里插入图片描述

1. for循环

for循环拷贝是最简单直观的方法,循环访问当前数组的每一个元素,并复制到新数组的相应下标。

示例代码:

package array;

import java.util.Arrays;

/**
 * @Date: 2023-03-14 星期二 14:06
 * @Author: Special Care
 * @Description: TODO for循环拷贝数组
 * @Version: 1.0.0
 */
public class CopyArrayDemo01 {
    public static void main(String[] args) {
        /**
         * for循环拷贝是最简单直观的方法,循环访问当前数组的每一个元素,并复制到新数组的相应下标。
         */
        int[] arr = {11,22,33,44};
        int[] brr = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            brr[i] = arr[i];
        }
        System.out.println(Arrays.toString(arr));
        System.out.println("拷贝的数组为:" + Arrays.toString(brr));
    }
}

运行结果:

在这里插入图片描述

2. 调用clone()方法

该方法是类Object类中的方法;使用clone方法进行拷贝时,是将arr中的所有元素都拷贝下来,不可以挑选。 clone() 方法的返回值是 Object 类型,要使用强制类型转换为适当的类型。

示例代码:

package array;

import java.util.Arrays;

/**
 * @Date: 2023-03-14 星期二 14:16
 * @Author: Special Care
 * @Description: TODO clone()方法拷贝数组
 * @Version: 1.0.0
 */
public class CopyArrayDemo02 {
    public static void main(String[] args) {
        /**
         * 该方法是类Object类中的方法;使用clone方法进行拷贝时,是将arr中的所有元素都拷贝下来,不可以挑选。
         * clone() 方法的返回值是 Object 类型,要使用强制类型转换为适当的类型。
         */
        int[] arr = {11,22,33,44,55};
        int[] brr = arr.clone();
        System.out.println(Arrays.toString(arr));
        System.out.println("拷贝的数组为:" + Arrays.toString(brr));
    }
}

运行结果:

在这里插入图片描述

3. Arrays类中的Arrays.copyOf()方法

该方法是整体拷贝。
在这里插入图片描述

  • int [] original:将要拷贝的原数组
  • int newLength:新数组的长度;可以扩容到原数组长度的2倍

使用这种方法复制数组时,默认从原数组的第一个元素(下标为 0)开始复制,新数组的长度将为 newlength。如果新数组长度 length 大于原数组长度,则新数组中采用默认值0进行填充;如果 newlength 小于原数组长度,则复制到第 length 个元素(下标为 length-1)截止。

这个方法底层调用了System.arraycopy方法:
在这里插入图片描述

示例代码:

package array;

import java.util.Arrays;

/**
 * @Date: 2023-03-14 星期二 14:21
 * @Author: Special Care
 * @Description: TODO Arrays.copyOf()方法拷贝数组
 * @Version: 1.0.0
 */
public class CopyArrayDemo03 {
    public static void main(String[] args) {
        /**
         * 该方法是整体拷贝。
         * int [] original:将要拷贝的原数组
         * int newLength:新数组的长度;可以扩容到原数组长度的2倍
         * 使用这种方法复制数组时,默认从原数组的第一个元素(下标为 0)开始复制,新数组的长度将为 newlength。
         * 如果新数组长度length大于原数组长度,则新数组中采用默认值0进行填充;
         * 如果 newlength 小于原数组长度,则复制到第length个元素(下标为length-1)截止。
         *
         */
        int[] arr = {11,22,33,44,55,66};
        int[] brr = Arrays.copyOf(arr,arr.length);
        System.out.println(Arrays.toString(arr));
        System.out.println("拷贝的数组为:" + Arrays.toString(brr));
    }
}

运行结果:

在这里插入图片描述

4. copyOfRange()方法

该方法是Arrays 类中的CopyOfRange()方法,该方法用于拷贝某个范围
在这里插入图片描述

  • int[] original:将要拷贝的原数组
  • int from:拷贝数组的起始下标 ,下标值必须在 0 到原数组长度之间;
  • int to:拷贝数组的终止下标,且终止下标必须大于等于起始下标,也可以大于 arr.length,如果大于 arr.length,则新数组中剩余的空位置用默认值0进行填充。

示例代码:

package array;

import java.util.Arrays;

/**
 * @Date: 2023-03-14 星期二 14:35
 * @Author: Special Care
 * @Description: TODO copyOfRange()方法拷贝数组
 * @Version: 1.0.0
 */
public class CopyArrayDemo04 {
    public static void main(String[] args) {
        /**
         * 该方法是Arrays 类中的 CopyOfRange() 方法,该方法用于拷贝某个范围
         * int[] original:将要拷贝的原数组
         * int from:拷贝数组的起始下标 ,下标值必须在 0 到原数组长度之间;
         * int to:拷贝数组的终止下标,且终止下标必须大于等于起始下标,也可以大于 arr.length,
         * 如果大于 arr.length,则新数组中剩余的空位置用默认值0进行填充
         */
        int[] arr = {11,22,33,44,55,66,77};
        int[] brr = Arrays.copyOfRange(arr,2,5); // 注意:[2,5),所以只能拷下标2~4的元素
        System.out.println(Arrays.toString(arr));
        System.out.println("拷贝的数组为:" + Arrays.toString(brr));
    }
}

运行结果:

在这里插入图片描述

5. System.arraycopy()方法

该方法位于System类中,语法形式如下:
在这里插入图片描述
使用此方法复制数组时,length+srcPos必须小于等于原数组的长度,同时 length+destPos 必须小于等于新数组的长度,否则报ArrayIndexOutOfBoundsException异常
在这里插入图片描述

示例代码:

package array;

import java.util.Arrays;

/**
 * @Date: 2023-03-14 星期二 14:44
 * @Author: Special Care
 * @Description: TODO System.arraycopy()方法拷贝数组
 * @Version: 1.0.0
 */
public class CopyArrayDemo05 {
    public static void main(String[] args) {
        /**
         * 使用此方法复制数组时,length+srcPos必须小于等于原数组的长度,
         * 同时 length+destPos 必须小于等于新数组的长度,
         * 否则报ArrayIndexOutOfBoundsException异常
         */
        int[] arr = {11,22,33,44,55,66,77,88};
        int[] brr = new int[10];
        brr[0] = 100;
        brr[1] = 99;
        System.arraycopy(arr,0,brr,2,8);
        System.out.println(Arrays.toString(arr));
        System.out.println("拷贝的数组为:" + Arrays.toString(brr));
    }
}

运行结果:

在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java数组的行列转换可以通过创建一个新的数组来实现。假设原始数组是一个二维数组,我们可以通过以下步骤将其转换为行列互换的新数组: 1. 获取原始数组的行数和列数。 2. 创建一个新的数组,其行数等于原始数组的列数,列数等于原始数组的行数。 3. 使用两个嵌套的循环遍历原始数组,并将每个元素复制到新数组的正确位置。 以下是一个示例代码,演示如何在Java进行行列转换: ``` public class ArrayTransposeExample { public static void main(String[] args) { int[][] originalArray = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // Get the number of rows and columns in the original array int rows = originalArray.length; int columns = originalArray[0].length; // Create a new array with swapped rows and columns int[][] transposedArray = new int[columns][rows]; // Copy elements from the original array to the transposed array for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { transposedArray[j][i] = originalArray[i][j]; } } // Print the original and transposed arrays System.out.println("Original array:"); printArray(originalArray); System.out.println("Transposed array:"); printArray(transposedArray); } private static void printArray(int[][] array) { for (int[] row : array) { for (int element : row) { System.out.print(element + " "); } System.out.println(); } } } ``` 在上面的示例,我们首先定义了一个原始数组,然后获取其行数和列数。接下来,我们创建一个新的数组,其行数等于原始数组的列数,列数等于原始数组的行数。最后,我们使用两个嵌套的循环遍历原始数组,并将每个元素复制到新数组的正确位置。最后,我们打印出原始数组和转置后的数组

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值