Java数组复制的四种方法

2023-11-19

数组的复制,有四种方法:

  • for
  • clone
  • System.arraycopy
  • arrays.copyof

均是浅拷贝

1、for

//源数组
int[] source = {10,30,20,40};
//目标数组
int[] target = new int[source.length];
for (int i = 0;i < source.length;i++){
    target[i] = source[i];
}

2、clone

protected native Object clone() throws CloneNotSupportedException;
int[] source = {1,2,3,4,5,6};
int[] target = new int[6];
target = source.clone();

克隆方法我们在数组中是找不到的,它是object的方法,我们先看看源码

看到了修饰符native,说明是由c或者c++实现的,它的优点是速度快,它返回了object对象,所以使用的时候需要用对象接收返回值。

3、System.arraycopy

// src –源数组。
// srcPos –源数组中的起始位置。
// dest –目标数组。
// destPos –目标数据中的起始位置。
// length –要复制的数组元素的数量。
public static native void arraycopy(Object src,  int  srcPos,
                                    Object dest, int destPos,
                                    int length);
int[] source = {1,2,3,4,5,6};
int[] target = new int[6];
System.arraycopy(source, 0, target, 0, source.length);

是否线程安全
System.arraycopy是不安全的。

是否高效 for vs System.arraycopy 复制数组
当测试数组的范围比较小的时候,两者相差的时间无几,当测试数组的长度达到百万级别,System.arraycopy的速度优势就开始体现了,根据对底层的理解,System.arraycopy是对内存直接进行复制,减少了for循环过程中的寻址时间,从而提高了效能。

4、Arrays.copyOf

// original –要复制的数组
// newLength –要返回的副本的长度
// 返回值:原始数组的副本,被截断或填充零以获取指定的长度
public static int[] copyOf(int[] original, int newLength) {
    int[] copy = new int[newLength];
    System.arraycopy(original, 0, copy, 0,
                     Math.min(original.length, newLength));
    return copy;
}
int[] source = {1,2,3,4,5,6};
int[] target = Arrays.copyOf(source, source.length);

参考链接

Arrays.copyOf() 底层使用的还是 System.arraycopy()

System:System.arraycopy方法详解

java数组的四种拷贝方式

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java数组复制的四种方法 的相关文章

  • unity 根据顶点位置变换顶点颜色

    using System Collections using System Collections Generic using UnityEngine public class HeightCOlor MonoBehaviour publi
  • 通信上的RX、TX分别表示什么?

    RX 表示接收数据 Receive rx Data 的简写形式 TX 表示发送数据 Transmit tx Data 的简写形式
  • Java JDK 安装及环境配置教程

    一 安装 1 安装包 jdk1 8安装包下载路径 2 创建一个英文的文件夹 注意 整个路径不要有中文 建议文件夹直接命名为JDK 3 在该文件夹下创建两个空文件夹 分别为 jdk1 8 和 jre 其中jdk1 8 是我的JDK版本 这个可
  • typora文章同步(跨平台)

    typora实现备份 个人博客 一 图片上传 PicGo有提供默认的图床 可以直接使用 但是有上传的限制 有特定要求的可以自己配置github图床 1 配置github图床 利用github搭建图床 2 安装PicGo 下载链接 windo
  • css3 --- 实现动画线条运动效果实例集合

    CSS3实现动画线条运动效果实例集合 一 laoyuan 2016 12 20 标签 css3 阅读 5 157 在我们日常的开发中 有时候有的图片 布局块需要加一下边框运动效果 对于这些效果 我们可以使用CSS3动画属性animation
  • 自己的小碎念

    现在是2019年6月26日下午15 11 我打算写一篇日记 记下这一天的经过 早晨七点 山鸡疯狂敲门 吓得我擦点猝死 我们宿舍都起床准备参加毕业典礼 像往常一样洗漱 聊天 然后去了礼堂门口 我们在那里拿着发的歌词 也没多看几眼 和朋友们闲聊
  • Java 求数字位数

    Java 求数字位数 int num 223 num num gt 0 num num System out print String valueOf num length
  • Date日期类型转换

    1 String 类型转换Date类型 import java text ParseException import java text SimpleDateFormat import java util Date public class
  • 记网易面试总结

    最近进行了一次网易的社招面试 目前结果未知 但是从网易面试中我还是有一些体会 总结如下 作为非计算机专业的程序员来说 如果要进大厂 数据结构与算法是一定要补的 适度刷下leetcode中的算法题 大厂都好这一口 不要不信邪 我就以身试法了一
  • 怎么把ipad中超大文件传输到电脑

    遇到了一个问题就是ipad文件中有几个超大压缩包需要传到电脑 想着上传到网盘在下载不是美滋滋 还特地借到了会员 为了上传大文件 但是网盘就很过分 会员在ipad端上传超过4g的文件也不允许 电脑端就没得问题 很无奈 然后问了度娘 给的各种解
  • Java List<Map<String, Object>> 排序

    name key值 List
  • 关于海康,宇视,天地伟业摄像头调试

    最近在项目中需要读取摄像机的内容 现有的摄像机有海康威视 宇视 和天地伟业三家的摄像机 一开始 天地伟业和宇视都给了demo 即html和css代码 是可以读取视频流的 但是海康威视没有给demo 只是告诉我们可以通过vlc来读取视频流的内
  • Tomcat 正确安装并启动后,浏览器访问localhost:8080显示404

    目录 1 确认 Tomcat 安装正确 且已打开 2 查看8080端口是否被占用 3 端口被占用的解决方法 在初次使用 Tomcat 时遇到了一些问题 经过一段时间的调试最终将其解决 个人感觉此问题应该比较常见 因此在这做一个分享 关于 T
  • org.apache.poi.ss.usermodel.Cell.setCellValue(Ljava/time/LocalDateTime;)V

    java 导出功能 出现错误的原因是 实体中存在日期 而导出的时候Excel无法转换日期类型 解决方法 在实体中将日期类型转换为String类型 ColumnWidth 25 ExcelProperty value 计划开始日期 index
  • 新增、修改入参方法

    一 HttpServletRequest req 获取参数值value 1 Postman 在params逐个参数赋值 PostMapping xxx String id req getParameter id 后端通过如上的方法一个个去获
  • 获取任意月份天数

    获取月份天数 import java text ParseException import java text SimpleDateFormat import java util Calendar public class demo2 pu
  • 没有权限删除文件

    通过远程发版时 有可能会没有权限删除文件 如下解决方法 1 将user 用户切换root 用户 sudo su root 该方法不一定成功 因为有可能设置权限你不能切换 但成功以后一劳永逸 当方法1没有成功时 采用如下方法 2 将你所操作的
  • Git merge并push到远程分支,但又要回滚到merge之前的代码

    1 使用git reflog 查看所有HEAD历史 2 观察日志列表内容 找到这次merge 之前 git log 例 ce7397d8 HEAD 36 commit merge Merge branch develop into rele
  • tf1.x和tf2.x查看TFRecord数据的方法

    Tensorflow 1 x和Tensorflow 2 x读取tfrecord方法略有不同 下面分别记录两段代码 Tensorflow 1 x for example in tf python io tf record iterator p
  • Java 实体设置指定日期格式

    import com fasterxml jackson annotation JsonFormat JsonFormat pattern yyyy MM dd HH mm ss timezone GMT 8 private Date cr

随机推荐

  • 贝叶斯网络学习

    状态空间搜索 如果按专业点的说法就是将问题求解过程表现为从初始状态到目标状态寻找这个路径的过程 通俗点说 两点之间求一线路 这两点是求解的开始和问题的结果 而这一线路不一定是直线 可以是曲折的 由于求解问题的过程中分枝有很多 主要是求解过程
  • 神经网络——实现MNIST数据集的手写数字识别

    由于官网下载手写数字的数据集较慢 因此提供便捷下载地址如下 手写数字的数据集MNIST下载 https download csdn net download gaoyu1253401563 10891997 数据集包含如下 一 使用小规模数
  • 超级简单!vue解决前后端跨域问题,看完就会

    在Vue中解决前后端跨域问题 需要通过配置和设置代理来实现 配置 在Vue的config目录下的index js文件中 找到devServer选项 在其中添加如下代码 devServer proxy api target http loca
  • mysql my-innodb-heavy-4g.cnf_my-innodb-heavy-4G.cnf 配置文件

    client 客户端配置 port 3306 mysql连接时默认的端口号 socket tmp mysql sock 用于连接mysql mysqld 服务端配置 port 3306 mysql服务默认监听的端口 socket tmp m
  • window opengl

    接口 https www khronos org registry OpenGL api GL
  • 一文吃透KMP算法

    前提 假设我们在字符串 bacbababaabababca 中 搜寻字符串 abababca 是否存在 KMP算法过程 下面就KMP算法的匹配过程进行阐述 step0 在执行匹配之前 先定义几个概念 前缀集合 后缀集合 部分匹配值 前缀集合
  • 天梯题集——紧急救援(Dijkstra+倒序打印分析)

    Dijkstra算法 用于求单源到其他点的最短路径 紧急救援 该题与 Dijkstra模板题 的不同之处在于该题需要记录更多信息 主要思路从局部最优到整体最优 类似dp的思想 include
  • 函数指针的使用

    函数指针的初始化 调用方式 include
  • .net core 连接mysql_asp.net core 连接mysql

    打开VS 工具 NuGet包管理器 管理解决方案的NuGet程序包 搜索MySql Data并安装 测试连接MySQL的代码 using System using System Collections Generic using Syste
  • python快速编程入门黑马程序员pdf_Python快速编程入门 传智播客 黑马程序员 python编程从入门到实践基础视频教程核心编程爬虫数据分析程序设计机器学习简明书籍...

    传智播客就业系列 从入门到就业 JAVA从入门到精通 套装5本 148 javaweb从入门到精通套装3本 88 Python从入门到实践套装8本 280 php教程全套7本 227 PHP套装5本 165 php全套5本 149 andr
  • uniapp uviewUI 安卓端 无法显示问题

    今天遇到个坑 其他端正常显示 就到安卓端不行 发现是uview的form组件的问题 官方的表单没问题 排错发现是模拟器问题 不支持X86 CPU 换了个模拟器就好了 发个模拟器配置连接https ask dcloud net cn arti
  • vue+vant动态渲染生成form表单生成多个上传插件(页面配置化)

    页面配置化 根据数据库配置 动态生成表单的上传组件 后面有补充表单输入框 单选框 复选框 日期控件 下拉框 picker选择器 以及级联的动态渲染 上传插件动态 从后端读取页面配置的表单信息 渲染到页面 这里是多个上传插件渲染了 依次上传后
  • R语言实现文本情感分析

    在本博客中 我们将介绍如何使用R语言进行文本情感分析 我们将介绍如何处理文本数据 构建模型 训练模型并进行情感预测 这里我们将使用IMDb电影评论数据集进行示例分析 数据准备 首先 我们需要下载并加载IMDb电影评论数据集 可以从这里下载数
  • 域名注册绑定内网穿透项目部署

    文章目录 1 注册域名 2 域名绑定 3 内网穿透 4 项目部署 5 关于tomcat配置的补充 1 注册域名 本次演示以腾讯云注册域名为例 方式如下 百度搜索腾讯云进入官网 或者点击此链接跳转腾讯云 如果没有账号 使用微信或者QQ注册 然
  • 模拟实现通讯录<二>(动态模拟)

    继静态模拟通讯录 实现动态模拟 静态模拟通讯录博客链接 http blog csdn net bitboss article details 51374654 实现一个通讯录 通讯录可以动态存储信息 每个人的信息包括 姓名 性别 年龄 电话
  • TensorFlow CNN 测试CIFAR-10数据集

    1 CIFAR 10 数据集 CIFAR 10数据集是机器学习中的一个通用的用于图像识别的基础数据集 官网链接为 The CIFAR 10 dataset官方教程Convolutional Neural Networks 下载使用的版本是
  • pip下载速度过慢解决方法

    好久没用pip了 速度太慢 参考了一下这篇文章 与github访问太慢类似 在c 用户 你的用户名 目录下面建立一个pip目录 再在其下面建立一个pip ini文件 内容为 global index url https pypi tuna
  • OJ刷题---【算法课动态规划] 换硬币(C++完整代码)

    题目 给定面值分别为2 5 7的硬币 每种硬币有无限个 给定一个N 求组成N最少需要的硬币的数量 若无法组成则返回 1 输入 输入N 1 lt N lt 100 输出 输出需要的最少硬币个数 完整代码 C include
  • mybatis:动态sql【2】+转义符+缓存

    目录 一 动态sql 1 set if 2 foreach 二 转义符 三 缓存cache 1 一级缓存 2 二级缓存 一 动态sql 1 set if 在update语句中使用set标签 动态更新set后的sql语句 if作为判断条件
  • Java数组复制的四种方法

    数组的复制 有四种方法 for clone System arraycopy arrays copyof 均是浅拷贝 1 for 源数组 int source 10 30 20 40 目标数组 int target new int sour