复制数组的几种方式

简介: 复制数组的几种方式

遍历复制

通过遍历数组,遍历的过程中把原数组中的数据复制到新的数组中

System.arraycopy

源码:


 * @param      src      the source array. //原数组
 * @param      srcPos   starting position in the source array. //在原数组中开始复制的位置
 * @param      dest     the destination array. //目标数组
 * @param      destPos  starting position in the destination data.//目标数组中开始的位置
 * @param      length   the number of array elements to be copied.//要复制的数组元素的数量
public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);


实例


        int[] arr = {1,2,3,4,5,6,7};
        int[] arr1 = new int[7];
        System.out.println(Arrays.toString(arr1));
        System.arraycopy(arr,0,arr1,0,7);
        System.out.println(Arrays.toString(arr1));


输出:


[0, 0, 0, 0, 0, 0, 0]
[1, 2, 3, 4, 5, 6, 7]



Arrays.copyOf


源码:


需要注意的是该方法是一个重载的方法,第一个参数为要复制的数组,第二个参数系数组的长度


public static int[] copyOf(int[] original, int newLength)



案例

 

        int[] arr = {1,2,3,4,5,6,7};
        int[] arr2 = Arrays.copyOf(arr,arr.length);
        System.out.println(Arrays.toString(arr2));


输出:


[1, 2, 3, 4, 5, 6, 7]
• 1


clone


通过源码可以看到该方法也是一个native方法,但其返回值为Object,因此赋值时会发生强转。其效率并不高


protected native Object clone() throws CloneNotSupportedException;



案例


int[] arr = {1,2,3,4,5,6,7};
        int[] arr3 = arr.clone();
        System.out.println(Arrays.toString(arr3));


输出:


[1, 2, 3, 4, 5, 6, 7]
• 1


在这四种方法中System.arraycopy是原生的,所以效率也是更高的。

相关文章
|
机器学习/深度学习 编解码 监控
计算机视觉实战项目4(单目测距与测速+摔倒检测+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A_路径规划+行人车辆计数+动物识别等)-1
计算机视觉实战项目4(单目测距与测速+摔倒检测+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A_路径规划+行人车辆计数+动物识别等)-1
|
10月前
|
安全 Java API
Java 18 概述:新特性一览
Java 18 作为 Java 平台的最新版本,引入了多项令人振奋的新特性和改进,包括模式匹配、记录类型、流库改进、外部函数与内存 API 以及并发处理增强。这些新功能不仅提升了开发者的生产力,还显著增强了 Java 的性能和安全性。本文将详细介绍 Java 18 的主要新特性,并通过代码示例帮助读者更好地理解和应用这些功能。
216 3
|
11月前
HDFS web Interfaces功能解读
HDFS web Interfaces功能解读
|
测试技术 Windows
软件测试之 性能测试 性能测试基础指标 Loadrunner、Jmeter等工具(下)
软件测试之 性能测试 性能测试基础指标 Loadrunner、Jmeter等工具(下)
168 2
|
弹性计算 JavaScript Java
阿里云服务器搭建部署宝塔详细流程
以下是内容的摘要: 本文主要介绍了在阿里云上创建和配置服务器环境的步骤,包括注册阿里云账号、实名认证、购买和设置服务器、域名的获取与备案、以及使用宝塔面板安装和配置环境。首先,用户需要注册阿里云账号并进行实名认证,选择合适的服务器配置。接着,购买服务器后,要准备并备案域名,以便通过友好的网址访问网站。在服务器上安装宝塔面板,可以方便地管理和配置LAMP/LNMP/Tomcat/Node.js等应用环境。完成这些步骤后,用户还需要在宝塔面板中安装MySQL、Redis等数据库,部署Java或Vue项目,并配置相关端口。最后,将前端项目打包上传至服务器,并设置站点,即可实现网站的上线。
|
存储 弹性计算 Ubuntu
阿里云云服务器实例使用教学
云服务器免费试用 阿里云云服务器网址:https://free.aliyun.com/?crowd=personal 详细步骤 访问阿里云免费试用。单击页面右上方的登录/注册按钮,并根据页面提示完成账号登录(已有阿里云账号)、账号注册(尚无阿里云账号)或实名认证(根据试用产品要求完成个人实名认证或企业实名认证)。 成功登录后,可试用人群选择个人认证,产品类别选择计算 > 云服务器 ECS,在试用卡片上单击立即试用。 在配置ECS实例信息面板,完成参数信息配置。本试用教程主要配置参数如表所示,其他参数可保持默认值。实际操作时,建议根据您的实际业务体量和需求选择。 参数 示例 操作系统 CentO
643 1
|
iOS开发 MacOS Python
完美解决 Python library not found: libpython3.10m.dylib, Python3, .Python, libpython3....
完美解决 Python library not found: libpython3.10m.dylib, Python3, .Python, libpython3....
300 0
|
机器学习/深度学习 算法 网络安全
【OpenVI—论文解读系列】ICML long talk | 开源半监督学习框架Dash
论文链接:Dash: Semi-Supervised Learningwith DynamicThreolding 本文介绍机器学习顶级国际会议 ICML 2021 接收的 long talk (top 3.02%) 论文 “Dash: Semi-Supervised Learning with Dynamic Thresholding”。
468 5
|
消息中间件 网络协议 Ubuntu
在外公网远程访问RabbitMQ服务 原创
RabbitMQ是一个在 AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。 由erlang开发的AMQP(Advanced Message Queue 高级消息队列协议 )的开源实现,由于erlang 语言的高并发特性,性能较好,本质是个队列,FIFO 先入先出,里面存放的内容是message,下面介绍通过在ubuntu+cpolar+rabbitMQ环境下,实现mq服务端远程访问。
|
负载均衡 Java 微服务
十八.SpringCloud源码剖析-Zuul的自动配置和核心Filter详解
在上一章节我们大致了解了Zuul的Filter的执行流程和核心的Filter,这一章节我们消息分析一下Zuul的自动配置,以及每个Filter的实现细节,这需要你有一定的耐心