Java中四种常用的数组复制的方法copyOf(),arraycop(),clone()和copyOfRange()的使用与区别

在Java中,数组的复制有多种方法,主要有以下四种:

  1. Arrays.copyOf()
  2. System.arraycopy()
  3. Arrays.copyOfRange()
  4. Object.clone()

下面我们来详细看一下这四种方法的使用和区别:

  1. Arrays.copyOf()

这是一个非常简单的方法,只需要一个源数组和一个目标长度作为参数。如果目标长度大于源数组的长度,则多余的部分会用0填充。如果源数组的元素类型是对象,则多余的部分会用null填充。




int[] src = {1, 2, 3, 4, 5};
int[] dest = Arrays.copyOf(src, 10);
  1. System.arraycopy()

这是一个本地方法,比较底层,参数较多,需要指定源数组、源数组的起始位置、目标数组、目标数组的起始位置以及复制的长度。




int[] src = {1, 2, 3, 4, 5};
int[] dest = new int[10];
System.arraycopy(src, 0, dest, 0, 5);
  1. Arrays.copyOfRange()

这个方法和copyOf()方法类似,但是它可以指定复制的范围,即源数组的开始和结束位置。




int[] src = {1, 2, 3, 4, 5};
int[] dest = Arrays.copyOfRange(src, 0, 3);
  1. Object.clone()

这是一个方法需要注意的是,只有实现了Cloneable接口的类才能使用这个方法。这个方法会创建一个新的对象,并复制原对象的内容。需要注意的是,clone()方法并不会对对象内部的数组进行深度复制,如果对象内部的数组包含对象,则这些对象只是简单的复制了引用。




int[] src = {1, 2, 3, 4, 5};
int[] dest = src.clone();

总结:

  • Arrays.copyOf() 方法简单,但不能指定复制的范围。
  • System.arraycopy() 方法复杂,但可以指定复制的范围,并且性能更好。
  • Arrays.copyOfRange() 方法和copyOf()方法类似,但可以指定复制的范围。
  • Object.clone() 方法需要对象实现Cloneable接口,并不会进行深度复制。
最后修改于:2024年08月08日 19:16

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日