首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java `Arrays.copyOf()` 方法详解与实例解析

Java `Arrays.copyOf()` 方法详解与实例解析

作者头像
默 语
发布2024-11-26 11:04:39
发布2024-11-26 11:04:39
71000
代码可运行
举报
文章被收录于专栏:JAVAJAVA
运行总次数:0
代码可运行

Arrays.copyOf() 方法详解与实例解析

摘要

在Java开发中,操作数组是一个基础而又常用的技能。无论是扩容、截取,还是复制数组,Arrays.copyOf() 方法都提供了简单高效的解决方案。本篇博客将通过多个实例,从基础到进阶,全面解析 Arrays.copyOf() 方法的用法及其适用场景,帮助初学者快速上手并避免常见误区。


引言

为什么需要 Arrays.copyOf() 方法?

在Java中,数组的长度是固定的。一旦创建,无法动态调整。这在需要扩容或缩减数组时就会成为一个问题。Arrays.copyOf() 方法为我们提供了一种简便的方式,不仅可以复制数组,还可以改变其大小。

本文目标
  1. 了解 Arrays.copyOf() 的基本用法
  2. 掌握常见的使用场景和操作技巧
  3. 通过代码实例巩固理解,避免使用中的潜在问题

正文

一、Arrays.copyOf() 方法的定义与语法
方法定义

Arrays.copyOf()java.util.Arrays 类中的静态方法,用于创建一个新数组,其内容是源数组的一部分或全部。

代码语言:javascript
代码运行次数:0
运行
复制
public static <T> T[] copyOf(T[] original, int newLength);
参数说明
  1. original: 源数组。
  2. newLength: 新数组的长度。如果新长度小于原数组,则会截取原数组的前 newLength 个元素;如果新长度大于原数组,多出的部分会用默认值填充(数值类型为0,布尔类型为false,引用类型为null)。
返回值

返回一个与源数组类型相同的新数组。


二、基本用法示例
1. 复制整个数组
代码语言:javascript
代码运行次数:0
运行
复制
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] original = {1, 2, 3, 4, 5};
        int[] copy = Arrays.copyOf(original, original.length);

        System.out.println("Original: " + Arrays.toString(original));
        System.out.println("Copy: " + Arrays.toString(copy));
    }
}

输出

代码语言:javascript
代码运行次数:0
运行
复制
Original: [1, 2, 3, 4, 5]  
Copy: [1, 2, 3, 4, 5]

这里,copy 数组与 original 数组的内容相同,但它们是独立的,不共享内存空间。


2. 扩容数组
代码语言:javascript
代码运行次数:0
运行
复制
int[] original = {1, 2, 3};
int[] expanded = Arrays.copyOf(original, 5);

System.out.println(Arrays.toString(expanded));

输出

代码语言:javascript
代码运行次数:0
运行
复制
[1, 2, 3, 0, 0]

新增的两个元素用默认值 0 填充。


3. 截取数组
代码语言:javascript
代码运行次数:0
运行
复制
int[] original = {1, 2, 3, 4, 5};
int[] truncated = Arrays.copyOf(original, 3);

System.out.println(Arrays.toString(truncated));

输出

代码语言:javascript
代码运行次数:0
运行
复制
[1, 2, 3]

截取了原数组的前3个元素。


三、常见应用场景
1. 动态扩容数组

数组长度固定,而 ArrayList 可动态扩容。若希望在保留数组结构的同时实现动态扩容,可结合 Arrays.copyOf() 来实现。

代码示例

代码语言:javascript
代码运行次数:0
运行
复制
public class Main {
    public static void main(String[] args) {
        int[] nums = {1, 2, 3};
        System.out.println("Original array: " + Arrays.toString(nums));

        // 扩容
        nums = Arrays.copyOf(nums, nums.length + 2);
        nums[3] = 4;
        nums[4] = 5;

        System.out.println("Expanded array: " + Arrays.toString(nums));
    }
}

输出

代码语言:javascript
代码运行次数:0
运行
复制
Original array: [1, 2, 3]  
Expanded array: [1, 2, 3, 4, 5]

2. 截取数组作为子数组

用于获取数组的一部分,比如分页数据。

代码示例

代码语言:javascript
代码运行次数:0
运行
复制
public class Main {
    public static void main(String[] args) {
        int[] data = {10, 20, 30, 40, 50};
        int[] page1 = Arrays.copyOf(data, 3);

        System.out.println("Page 1: " + Arrays.toString(page1));
    }
}

输出

代码语言:javascript
代码运行次数:0
运行
复制
Page 1: [10, 20, 30]

3. 初始化更大的默认数组

在设计固定容量的缓存系统时,常需要初始化容量较大的空数组。


四、注意事项与常见错误
1. newLength 的范围

newLength 参数为负数时,会抛出 NegativeArraySizeException

错误示例

代码语言:javascript
代码运行次数:0
运行
复制
int[] nums = {1, 2, 3};
int[] error = Arrays.copyOf(nums, -1); // 报错
2. 类型一致性

Arrays.copyOf() 会尝试保持数组类型一致,但若无法转换,则抛出异常。


五、与其他方法的对比

方法

功能

是否支持扩容

Arrays.copyOf()

创建新数组并复制内容

System.arraycopy()

将数组中的部分元素复制到另一个数组

Arrays.copyOfRange()

复制数组指定范围的元素


总结

  • Arrays.copyOf() 是操作数组的利器,支持扩容和截取等功能,非常适合处理数组长度受限的问题。
  • 在实际开发中,务必根据需求选择适当的方法,并注意 newLength 的合法性。
  • 通过 Arrays.copyOf() 可以高效实现动态扩容、子数组截取等功能。

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Arrays.copyOf() 方法详解与实例解析
    • 摘要
    • 引言
      • 为什么需要 Arrays.copyOf() 方法?
      • 本文目标
    • 正文
      • 一、Arrays.copyOf() 方法的定义与语法
      • 二、基本用法示例
      • 三、常见应用场景
      • 四、注意事项与常见错误
      • 五、与其他方法的对比
    • 总结
    • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档