当前位置: 首页 > news >正文

【Java】复制数组的四种方式

1. System.arraycopy()

用来将一个数组的(一部分)内容复制到另一个数组里面去。

定义:

void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);

例:

int[] arr1 = { 1, 2, 3, 4, 5 };
int[] arr2 = new int[10];
System.arraycopy(arr1, 0, arr2, 0, arr1.length);

如果传入的参数为 null、传入的参数不是数组、无法将原数组的类型转换为目标数组的类型、目标数组长度不够,都会抛出异常。
见文档。

2. arr.clone()

这个方法实际上是从 Object 里继承过来的。用来克隆本数组,返回一个新数组

定义:

protected Object clone();

例:

int[] arr1 = { 1, 2, 3, 4, 5 };
int[] arr2 = null;
arr2 = arr1.clone();

见文档。

3. Arrays.copyOf()

Arrays 位于 import java.util.Arrays 下。

这个函数有两个版本:

<T> T[] java.util.Arrays.copyOf(T[] original, int newLength)
<T, U> T[] java.util.Arrays.copyOf(U[] original, int newLength, Class<? extends T[]> newType)

见文档。

<T>

复制指定数组为一个新的、指定长度的数组。
新长度可以:

  1. 和原来的一样长:全部复制
  2. 比原来的短:只复制源数组前面一部分
  3. 比原来的长:新数组多余的部分用 null 填充

<T, U>

复制指定数组为一个新的、指定长度、指定类型的数组。
源数组里的内容会被自动转换为新数组的类型。但注意,源数组的元素类型必须可以被转换为新类型,否则会抛出 ArrayStoreException 异常。

例:

Integer[] arr1 = { 1, 2, 3, 4, 5 };
// 注意 <T,U> 版本的第三个参数 `newType` 是目标数组类型,不是目标数组元素类型
// 所以应该是 Object[].class,而不是 Object.class
Object[] arr2 = Arrays.copyOf(arr1, 4, Object[].class);
for (Object object : arr2) {System.out.println(object);
}

4. Arrays.copyOfRange()

这个方法同样有两个定义:

<T> T[] copyOfRange(T[] original, int from, int to);
<T,U> T[] copyOfRange(U[] original, int from, int to, Class<? extends T[]> newType);

Arrays.copyOfRange()Arrays.copyOf(),差不多,只是前者可以指定起始位置而已。

总结

四种方法的实现关系(箭头表示“调用了”):
方法实现关系图
所以 System.arraycopyObject.clone() 的效率要比 Arrays 高。

四种方法的特点比较:
四种方法对比表格

相关文章:

【Java】复制数组的四种方式

1. System.arraycopy() 用来将一个数组的&#xff08;一部分&#xff09;内容复制到另一个数组里面去。 定义&#xff1a; void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);例&#xff1a; int[] arr1 { 1, 2, 3, 4, 5 }; int[] arr2 new…...

设计模式5、原型模式 Prototype

解释说明&#xff1a;使用原型实例指定待创建对象的类型&#xff0c;并且通过复制这个原型阿里创建型的对象 UML 结构图&#xff1a; 抽象原型&#xff08;Prototype&#xff09;&#xff1a;规定了具体原型对象必须实现的clone()方法 具体原型&#xff08;ConcretePrototype&…...

驱动挂载物理页代码示例

驱动挂载物理页代码示例 使用的实验环境为32位xp系统在101012分页模式下 此实验用于测试对分页模式的掌握程度 代码思路如下&#xff1a; 获取目标进程的cr3在目标进程中申请新的物理页拆分新申请的物理页的线性地址通过差分出的内容获取pte将pte写入到要挂载的线性地址的p…...

【新版】系统架构设计师 - 层次式架构设计理论与实践

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 层次式架构设计理论与实践考点摘要层次式体系结构概述表现层框架设计MVC模式MVP模式MVVM模式使用XML设计表现层表现层中UIP设计思想 中间层架构设计业务逻辑层工作流设计业务逻辑层设计 数据访问层…...

大数据Flink(九十):Lookup Join(维表 Join)

文章目录 Lookup Join(维表 Join) Lookup Join(维表 Join) Lookup Join 定义(支持 Batch\Streaming):Lookup Join 其实就是维表 Join,比如拿离线数仓来说,常常会有用户画像,设备画像等数据,而对应到实时数仓场景中,这种实时获取外部缓存的 Join 就叫做维表 Join。…...

Docker方式创建MySQL8的MGR集群

目录 一、MGR简述二、安装环境及要求2.1 系统版本2.2 网络要求 三、安装步骤3.1 创建容器3.2 创建用户3.3 安装插件3. 4 启动集群3.5 加入集群 四、查看集群查看 MGR 组成员列表查看 MGR 组成员拓扑信息 五、其他说明集群配置要求集群配置限制集群相关变量和状态 一、MGR简述 …...

问 ChatGPT 关于GPT的事情:扩展篇

一、GPT预训练有什么节省显存和算力的技巧吗&#xff1f;我如何拿四块A100完成175B模型的预训练&#xff1f; 对于GPT预训练&#xff0c;有一些技巧可以帮助节省显存和算力。以下是一些常用的技巧&#xff1a; 按批次截断&#xff1a;在较长的文本序列中&#xff0c;将其切割…...

Spring Boot 集成 MinIO 实现文件上传、下载和删除

MinIO 是一种开源的对象存储服务&#xff0c;它基于云原生架构构建&#xff0c;并提供了高性能、易于扩展和安全的存储解决方案。 一.安装和配置 MinIO 服务器 为了演示方便&#xff0c;本文采用Windows安装 1.在官方网站下载MinIO 安装文件&#xff0c;地址&#xff1a;ht…...

Polygon Miden交易模型:Actor模式 + ZKP => 并行 + 隐私

1. 引言 前序博客&#xff1a; Polygon Miden&#xff1a;扩展以太坊功能集的ZK-optimized rollupPolygon Miden zkRollup中的UTXO账户混合状态模型 Polygon Miden为&#xff1a; ZK-optimized rollup由客户端生成证明完善Polygon ZK系列解决方案&#xff0c;致力于成为网络…...

Java流的体系结构(二)

文章目录 一、对象流的使用1.概念2.序列化机制3.代码案例&#xff1a;序列化过程&#xff1a;将内存中的java对象保存到磁盘中或通过通络传输出去4.反序列化&#xff0c;将磁盘文件中的对象还原为内存中的一个java对象 二、RandomAccessFile的使用1.说明2.代码案例 提示&#x…...

python计算阶层

阶层&#xff08;Factorial&#xff09;是指从1到一个正整数n的所有整数相乘&#xff0c;即n! 1 2 3 … n。下面是Python代码计算阶层&#xff1a; def factorial(n):"""计算阶层:param n: 正整数:return: n的阶层"""if n 1 or n 0:retu…...

前端架构师之01_ES6_基础

1 初识ES6 简单来说&#xff0c;ECMAScript是JavaScript语言的国际标准&#xff0c;JavaScript是实现ECMAScript标准的脚本语言。 2011年&#xff0c;ECMA国际标准化组织在发布ECMAScript 5.1版本之后&#xff0c;就开始着手制定第6版规范。 存在的问题&#xff1a;这个版本…...

银行卡号识别

# 导入工具包 from imutils import contours import numpy as np import argparse import cv2 import myutils# 设置参数 # ap = argparse.ArgumentParser() # ap.add_argument("-i", "--image", required=True, # help="path to input image")…...

【Idea】idea、datagrip设置输入法

https://github.com/RikudouPatrickstar/JetBrainsRuntime-for-Linux-x64/releases/tag/jbr-release-17.0.6b829.5https://github.com/RikudouPatrickstar/JetBrainsRuntime-for-Linux-x64/releases/tag/jbr-release-17.0.6b829.5 下载后解压并重命名为 jbr, 然后替换对应 ide…...

回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于RF-Adaboost随机森林结合…...

最小生成树 | 市政道路拓宽预算的优化 (Minimum Spanning Tree)

任务描述&#xff1a; 市政投资拓宽市区道路&#xff0c;本着执政为民&#xff0c;节省纳税人钱的目的&#xff0c;论证是否有必要对每一条路都施工拓宽&#xff1f; 这是一个连问带答的好问题。项目制学习可以上下半场&#xff0c;上半场头脑风暴节省投资的所有可行的思路&a…...

Java实现使用多线程,实现复制文件到另一个目录,起不一样的名字,创建100万个数据

目录 1 需求2 实现 1 需求 我现在有一个300MB 的文件&#xff0c;想要根据这个文件&#xff0c;创建100万个大小一样的&#xff0c;名称不一样&#xff0c;如何实现&#xff0c;如何比较快点实现 2 实现 1 先准备好这个文件 2 准备好目录 3 写代码 private static void crea…...

uni-app:canvas-图形实现1

效果 代码 <template><view><!-- 创建了一个宽度为300像素&#xff0c;高度为200像素的canvas元素。canvas-id属性被设置为"firstCanvas"&#xff0c;可以用来在JavaScript中获取该canvas元素的上下文对象。 --><canvas style"width:200p…...

【算法分析与设计】动态规划(下)

目录 一、最长公共子序列1.1 最长公共子序列的结构1.2 子问题的递归结构1.3 计算最优值1.4 举例说明1.5 算法的改进 二、最大子段和2.1 代码2.2 最大子段和问题的分治算法2.3 代码2.4 分治算法的时间复杂度2.5 最大子段和问题的动态规划算法 三、凸多边形最优三角剖分3.1 三角剖…...

计算机图像处理-均值滤波

均值滤波 线性滤波器的原始数据与滤波结果是一种算术运算&#xff0c;即用加减乘除等运算实现&#xff0c;如均值滤波器&#xff08;模板内像素灰度值的平均值&#xff09;、高斯滤波器&#xff08;高斯加权平均值&#xff09;等。由于线性滤波器是算术运算&#xff0c;有固定…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

解析“道作为序位生成器”的核心原理

解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制&#xff0c;重点解析"道作为序位生成器"的核心原理与实现框架&#xff1a; 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...