Java `Arrays.copyOf()` 方法详解与实例解析
在Java开发中,操作数组是一个基础而又常用的技能。无论是扩容、截取,还是复制数组,方法都提供了简单高效的解决方案。本篇博客将通过多个实例,从基础到进阶,全面解析方法的用法及其适用场景,帮助初学者快速上手并避免常见误区。是操作数组的利器,支持扩容和截取等功能,非常适合处理数组长度受限的问题。在实际开发中,务必根据需求选择适当的方法,并注意newLength的合法性。通过可以高效实现动态扩容、子数组
博主 默语带您 Go to New World.
✍ 个人主页—— 默语 的博客👦🏻 优秀内容
《java 面试题大全》
《java 专栏》
《idea技术专区》
《spring boot 技术专区》
《MyBatis从入门到精通》
《23种设计模式》
《经典算法学习》
《spring 学习》
《MYSQL从入门到精通》数据库是开发者必会基础之一~
🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭
🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨
默语是谁?
大家好,我是 默语,别名默语博主,擅长的技术领域包括Java、运维和人工智能。我的技术背景扎实,涵盖了从后端开发到前端框架的各个方面,特别是在Java 性能优化、多线程编程、算法优化等领域有深厚造诣。
目前,我活跃在CSDN、掘金、阿里云和 51CTO等平台,全网拥有超过10万的粉丝,总阅读量超过1400 万。统一 IP 名称为 默语 或者 默语博主。我是 CSDN 博客专家、阿里云专家博主和掘金博客专家,曾获博客专家、优秀社区主理人等多项荣誉,并在 2023 年度博客之星评选中名列前 50。我还是 Java 高级工程师、自媒体博主,北京城市开发者社区的主理人,拥有丰富的项目开发经验和产品设计能力。希望通过我的分享,帮助大家更好地了解和使用各类技术产品,在不断的学习过程中,可以帮助到更多的人,结交更多的朋友.
我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。
Java Arrays.copyOf()
方法详解与实例解析
摘要
在Java开发中,操作数组是一个基础而又常用的技能。无论是扩容、截取,还是复制数组,Arrays.copyOf()
方法都提供了简单高效的解决方案。本篇博客将通过多个实例,从基础到进阶,全面解析 Arrays.copyOf()
方法的用法及其适用场景,帮助初学者快速上手并避免常见误区。
引言
为什么需要 Arrays.copyOf()
方法?
在Java中,数组的长度是固定的。一旦创建,无法动态调整。这在需要扩容或缩减数组时就会成为一个问题。Arrays.copyOf()
方法为我们提供了一种简便的方式,不仅可以复制数组,还可以改变其大小。
本文目标
- 了解
Arrays.copyOf()
的基本用法。 - 掌握常见的使用场景和操作技巧。
- 通过代码实例巩固理解,避免使用中的潜在问题。
正文
一、Arrays.copyOf()
方法的定义与语法
方法定义
Arrays.copyOf()
是 java.util.Arrays
类中的静态方法,用于创建一个新数组,其内容是源数组的一部分或全部。
public static <T> T[] copyOf(T[] original, int newLength);
参数说明
original
: 源数组。newLength
: 新数组的长度。如果新长度小于原数组,则会截取原数组的前newLength
个元素;如果新长度大于原数组,多出的部分会用默认值填充(数值类型为0,布尔类型为false
,引用类型为null
)。
返回值
返回一个与源数组类型相同的新数组。
二、基本用法示例
1. 复制整个数组
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));
}
}
输出:
Original: [1, 2, 3, 4, 5]
Copy: [1, 2, 3, 4, 5]
这里,copy
数组与 original
数组的内容相同,但它们是独立的,不共享内存空间。
2. 扩容数组
int[] original = {1, 2, 3};
int[] expanded = Arrays.copyOf(original, 5);
System.out.println(Arrays.toString(expanded));
输出:
[1, 2, 3, 0, 0]
新增的两个元素用默认值 0
填充。
3. 截取数组
int[] original = {1, 2, 3, 4, 5};
int[] truncated = Arrays.copyOf(original, 3);
System.out.println(Arrays.toString(truncated));
输出:
[1, 2, 3]
截取了原数组的前3个元素。
三、常见应用场景
1. 动态扩容数组
数组长度固定,而 ArrayList
可动态扩容。若希望在保留数组结构的同时实现动态扩容,可结合 Arrays.copyOf()
来实现。
代码示例:
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));
}
}
输出:
Original array: [1, 2, 3]
Expanded array: [1, 2, 3, 4, 5]
2. 截取数组作为子数组
用于获取数组的一部分,比如分页数据。
代码示例:
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));
}
}
输出:
Page 1: [10, 20, 30]
3. 初始化更大的默认数组
在设计固定容量的缓存系统时,常需要初始化容量较大的空数组。
四、注意事项与常见错误
1. newLength
的范围
newLength
参数为负数时,会抛出 NegativeArraySizeException
。
错误示例:
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()
可以高效实现动态扩容、子数组截取等功能。
如果你在使用中遇到任何问题,或者对其他数组操作感兴趣,欢迎添加我的微信 (微信号:Solitudemind),一起探讨学习吧! 😊
参考资料
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥
如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进📓;(联系微信:Solitudemind )
点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。
更多推荐
所有评论(0)