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数组复制的四种方法 的相关文章

  • thinkphp5.0.24反序列化漏洞分析

    thinkphp5 0 24反序列化漏洞分析 文章目录 thinkphp5 0 24反序列化漏洞分析 具体分析 反序列化起点 toArray getRelationData分析 modelRelation生成 进入 call前的两个if c
  • 通信上的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
  • 山坡羊·潼关怀古

    张养浩 峰峦如聚 波涛如怒 山河表里潼关路 望西都 意踌躇 伤心秦汉经行处 宫阙万间都做了土 兴 百姓苦 亡 百姓苦
  • Java 发版jar不直接显示日志

    发版jar不直接显示日志 这样做以防有人点击服务将服务暂停导致程序出现错误 java jar xxx jar gt log out 日志可以在log out文件查看 注意 不要将命令弹窗关闭
  • 杂记——记录一次参加华为OD研发岗位的面试过程

    流程 一 在线机试 二 性格测试 三 技术一面 四 技术二面 五 技术三面 六 资格面试 七 综合面试 关于od 自己去论坛上面看吧 褒贬不一 自个儿衡量 一 在线机试 1 在 牛客网 上完成三道题目 多是字符串和排列相关的题目 总分在15
  • 安卓子线程内存问题——有结论

    问题描述 有一套C 库 通过JNI被安卓应用调用 应用中在主线程 UI现场 调用一函数正常 在子线程中调用该函数会导致APP崩溃 APP崩溃时报错信息如下 E libsigchain exiting due to SIG DFL handl
  • No converter for [class com.xxx.utils.Result] with preset Content-Type ‘application/octet-stre

    java 导出功能 出现该错误可能原因是 controller层有返回值 解决方法 将返回值设置成void 如果非要设置返回值 额 我也没找到解决方法 谁要是会的话 下面评论一下 感谢
  • K8s学习笔记二:Ubuntu安装minikube以及K8s简单体验

    Ubuntu安装minikube官方文档看这里 完成Docker十分钟了解Docker 我的Docker学习笔记 和kubectlUbuntu安装kubectl的下载安装后 就可以进行minikube的安装了 它能够帮助我们在本地非常容易的
  • 记网易面试总结

    最近进行了一次网易的社招面试 目前结果未知 但是从网易面试中我还是有一些体会 总结如下 作为非计算机专业的程序员来说 如果要进大厂 数据结构与算法是一定要补的 适度刷下leetcode中的算法题 大厂都好这一口 不要不信邪 我就以身试法了一
  • 悲剧的山寨采用的新芯片资料汇总(更新Rk3066)

    芯片名称 基友公司 上市前宣传主频 量产机最高主频 最高主频 GPU 备注 Rk3066 原道 酷比魔方 1 4GHz 2 1 6GHz 2 1 6GHz 2 Mali 400MP4 266MHz 旧固件 Mali 400MP4 399MH
  • Not allowed to load local resource: file:///D:/xxx.jpg

    问题 Not allowed to load local resource file D xxx jpg 出现以上情况的原因是浏览器不允许访问本地路径 所以你需要配置一个虚拟的路径代替本地的路径 解决方法 思路 通过tomcat代理 在to
  • 在IDE中使用Bito - 一个不需要VPN就可以使用的chatgpt

    文章目录 在IDE中使用Bito 什么是Bito 为什么要使用Bito Bito可以做什么 如何在IDE中安装Bito 使用Bito 在IDE中使用Bito 什么是Bito 用他自己的介绍就是 Bito s AI helps develop
  • C++去掉字符串前后的多余空格

    C 中std string 没有可以直接去掉字符串前后多余空格的接口 所以自己实现了一个 借鉴Qt中QString的trimmed 函数源码实现的版本 去掉std string 字符串前后的空格 void string trimmed st
  • Tomcat 正确安装并启动后,浏览器访问localhost:8080显示404

    目录 1 确认 Tomcat 安装正确 且已打开 2 查看8080端口是否被占用 3 端口被占用的解决方法 在初次使用 Tomcat 时遇到了一些问题 经过一段时间的调试最终将其解决 个人感觉此问题应该比较常见 因此在这做一个分享 关于 T
  • wps(word)复制过来的文字一行字数不足却自动换行解决办法

    问题描述 在wps或者word里粘贴网页上复制过来的文字常常会出现每行字数不足换行要求却提前换行的情况 如下图所示 问题分析 出现这种情况主要是从网页上复制过来的文字保留了原网站的段落标记 手动换行符 打开显示段落标记 出现向下的箭头符号就
  • 获取任意月份天数

    获取月份天数 import java text ParseException import java text SimpleDateFormat import java util Calendar public class demo2 pu
  • URI中的 “//” 有什么用

    前言 很多时候互联网很多东西都是很有意思的 比如 http 这个双斜杠 解释这个东西就需要翻墙去国外了 入口 在2009年10月 BBC中的一篇新闻讲述了 的用途 截图如下所示 文章翻译 互联网地址开头的大幅删减长期以来一直困扰着网民 现在
  • 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