数组克隆/复制

数组的复制/克隆

        • 1.浅克隆
        • 2.深克隆
        • 3.使用System.ArrayCopy()方法
        • 4.使用Arrays.copyOf()方法
        • 5.使用Arrays.copyOfRange()方法
        • 6.使用Object.clone()方法

1.浅克隆

将原来数组的地址赋值给新数组,两个数组名指向了同一个数组,修改其中一个中的元素,那么他们查询到的元素都是修改过的元素

public class Test01{public static void main(String [] args){int [] arr = {10,20,30,40};int [] newArr =new int[arr.length]; //创建一个新的数组,长度和原来数组一样newArr = arr ;//将原来数组的地址赋值给新数组arr[1] = 100;  // 10  100  30  40 arr数组for(int i = 0;i<newArr.length;i++){System.out.println(newArr[i]+" "); //10  100  30  40 新数组}}
}

输出:

在这里插入图片描述

注意:任务是将arr的内容复制到newArr中,但是上面代码是数组地址的引用分配,这并不是真正的复制

2.深克隆

深克隆,为了解决浅克隆的问题,引用了for循环来将arr的元素,复制到newArr中。

public class Test01{public static void main(String [] args){int [] arr = {10,20,30,40};int [] newArr =new int[arr.length]; //创建一个新的数组,长度和原来数组一样for(int i= 0;i<newArr.length;i++){ //因为长度一样,所以遍历两个数组都可以newArr[i] = arr[i]; //将arr的每一个元素赋值给newArr对应的每一个元素}//修改arrarr[1] = 100;  // 10  100  30  40 arr数组//打印arrfor (int j : arr) {System.out.print(j + " "); //10  100  30  40 arr数组}System.out.println();//打印newArrfor (int j : newArr) {System.out.print(j + " "); //10  20  30  40 newArr}}
}

输出:

在这里插入图片描述

结果表示,两个名字并不指向同一个数组地址

3.使用System.ArrayCopy()方法

java的system有一个ArrayCopy的方法可以将一个数组的元素复制到另外一个数组中

方法的原型:

public static void arraycopy(Object src_array ,int src_Pos,Object dest_array,int dest_Pos,int length)

理解:

  • Object src_array:要用来复制元素的原数组
  • int arc_Pos: 开始复制索引位置
  • Object dest_array:目标数组
  • int dest_Pos: 要复制的元素在目标数组中的起始索引
  • int length: 要复制的数组长度

案例

public class Test01{public static void main(String [] args){int [] arr = {10,20,30,40};int [] newArr =new int[arr.length]; //创建一个新的数组,长度和原来数组一样System.arraycopy(arr,0,newArr,0,arr.length);//修改arrarr[1] = 100;  // 10  100  30  40 arr数组//打印arrfor (int j : arr) {System.out.print(j + " "); //10  100  30  40 arr数组}System.out.println(); //打印newArrfor (int j : newArr) {System.out.print(j + " "); //10  20  30  40 newArr}}
}

输出:

在这里插入图片描述

结果表示System.ArrayCopy()方法是深度克隆

4.使用Arrays.copyOf()方法

copyOf()方法属于Arrays类,是java.util下的一部分,内部采用了arraycopy()。

方法原型:

public static int[] copyOf(原数组,要返回的数组长度)

案例

public class Test01{public static void main(String [] args){int [] arr = {10,20,30,40};int [] newArr = Arrays.copyOf(arr,arr.length);//修改arrarr[1] = 100;  // 10  100  30  40 arr数组//打印arrfor (int j : arr) {System.out.print(j + " "); //10  100  30  40 arr数组}System.out.println();//打印newArrfor (int j : newArr) {System.out.print(j + " "); //10  20  30  40 newArr}}
}

输出:

在这里插入图片描述

5.使用Arrays.copyOfRange()方法

和copyOf()一样,内部也是用了arraycopy()。

方法原型:

public static int[] copyOfRange(原数组,起始索引,结束索引)

案例:

public class Test01{public static void main(String [] args){int [] arr = {10,20,30,40};int [] newArr = Arrays.copyOfRange(arr,0,arr.length);//修改arrarr[1] = 100;  // 10  100  30  40 arr数组//打印arrfor (int j : arr) {System.out.print(j + " "); //10  100  30  40 arr数组}System.out.println();//打印newArrfor (int j : newArr) {System.out.print(j + " "); //10  20  30  40 newArr}}
}

输出:

在这里插入图片描述

6.使用Object.clone()方法

数组调用.clone()方法达到深克隆效果

public class Test01{public static void main(String [] args){int [] arr = {10,20,30,40};int [] newArr = arr.clone();//修改arrarr[1] = 100;  // 10  100  30  40 arr数组//打印arrfor (int k : arr) {System.out.print(k + " "); //10  100  30  40 arr数组}System.out.println();//打印newArrfor (int j : newArr) {System.out.print(j + " "); //10  20  30  40 newArr}}
}

输出:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1409760.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

jvm面试题30问

什么是JVM的跨平台&#xff1f; 什么是JVM的语言无关性&#xff1f; 什么是JVM的解释执行 什么是JIT? JIT&#xff1a;在Java编程语言和环境中&#xff0c;即时编译器&#xff08;JIT compiler&#xff0c;just-in-time compiler&#xff09;是一个把Java的字节码&#xff08;…

【精选文献】JAG|基于时序Sentinel-1 SAR影像小农耕作区烟草空间分布制图

目录 文章简介 01 文章摘要 02 研究背景、目标及创新点 03 研究区域与数据集 04 研究方法 05 研究结果 06 研究讨论 07 研究结论 08 文章引用 文章简介 论文名称&#xff1a;Mapping tobacco planting areas in smallholder farmlands using Phenological-Spatial-Te…

【自用】在ipad上安装.ipa文件

借助爱思助手在ipad上安装.ipa文件 爱思助手官网&#xff08;www.i4.cn&#xff09; 对于不能上架 App Store 的应用&#xff0c;可以使用证书签名或使用 Apple ID 签名后正常安装到设备。准备好证书或 Apple ID以及需要签名的 IPA 文件&#xff0c;使用爱思助手就可以快速完成…

54.HarmonyOS鸿蒙系统 App(ArkTS)tcp socket套接字网络连接

54.HarmonyOS鸿蒙系统 App(ArkTS)tcp socket套接字网络连接 import socket from ohos.net.socket; import process from ohos.process; import wifiManager from ohos.wifiManager;import common from ohos.app.ability.common;let tcp socket.constructTCPSocketInstance();…

[数据结构]———交换排序

目录 ​编辑 ​编辑 1.交换排序 第一个定义了一个名为Swap的函数 第二个三数取中 2.冒泡排序 代码解析 冒泡排序的特性总结&#xff1a; 3.快速排序 1. hoare版本 2. 挖坑法 代码解析 3. 前后指针版本 代码解析 1.交换排序 基本思想&#xff1a;所谓交换&#xff0…

Gromacs软件进行蛋白-配体体系MD模拟

1、进行能量最小化 下载官方提供的参数文件&#xff1a;em.mdp &#xff0c;或者直接复制这里&#xff1a; ; LINES STARTING WITH ; ARE COMMENTS title Minimization ; Title of run; Parameters describing what to do, when to stop and what to save integrator …

golang 基础知识细节回顾

之前学习golang的速度过于快&#xff0c;部分内容有点囫囵吞枣的感觉&#xff0c;写gorm过程中有很多违反我常识的地方&#xff0c;我通过复习去修正了我之前认知错误和遗漏的地方。 itoa itoa自增的作用在编辑error code时候作用很大&#xff0c;之前编辑springboot的error c…

Go Web 开发基础【用户登录、注册、验证】

前言 这篇文章主要是学习怎么用 Go 语言&#xff08;Gin&#xff09;开发Web程序&#xff0c;前端太弱了&#xff0c;得好好补补课&#xff0c;完了再来更新。 1、环境准备 新建项目&#xff0c;生成 go.mod 文件&#xff1a; 出现报错&#xff1a;go: modules disabled by G…

《原则》生活和工作 - 三余书屋 3ysw.net

原则&#xff1a;生活和工作 您好&#xff0c;今天我们解读的书是《原则&#xff1a;生活和工作》。这本书和我们之前解读过的《原则&#xff1a;应对变化中的世界秩序》是同一个作者写的。那本书的主题非常宏大&#xff0c;它讨论的是世界运行的原则。而今天我们聊的《原则&a…

05 - 步骤 JSON output

简介 JSON Output 步骤用于将 Kettle 中的行流数据写出到 JSON 格式的文件或流中。它允许用户将 Kettle 中处理过的数据以 JSON 格式进行输出&#xff0c;适用于各种数据处理和交换场景。 什么是行流数据&#xff1f; preview data 中的每一个字段都是一个行流数据 使用 场…

Java | Leetcode Java题解之第62题不同路径

题目&#xff1a; 题解&#xff1a; class Solution {public int uniquePaths(int m, int n) {long ans 1;for (int x n, y 1; y < m; x, y) {ans ans * x / y;}return (int) ans;} }

C# Winform父窗体打开新的子窗体前,关闭其他子窗体

随着Winform项目越来越多&#xff0c;界面上显示的窗体越来越多&#xff0c;窗体管理变得更加繁琐。有时候我们要打开新窗体&#xff0c;然后关闭多余的其他窗体&#xff0c;这个时候如果一个一个去关闭就会变得很麻烦&#xff0c;而且可能还会出现遗漏的情况。这篇文章介绍了三…

《R语言与农业数据统计分析及建模》学习——logistic回归和poisson回归

普通线性回归通常用来描述变量y与x之间的线性关系&#xff1a; 普通线性模型的假设是&#xff1a;响应变量y是连续型变量而且&#xff0c;服从正态分布分布。但在很多现实情况y并不是正态分布&#xff0c;如&#xff1a;二值问题/多分类问题&#xff0c;计次问题等&#xff0c;…

MySQL数据库练习(7)

schooldb库——utf8字符集——utf8_general_ci排序规则 31. DDL CREATE TABLE home_menus (menuId int(11) NOT NULL COMMENT 自增ID,parentId int(11) NOT NULL DEFAULT 0 COMMENT 父ID,menuName varchar(100) NOT NULL COMMENT 菜单名称,menuUrl varchar(100) NOT NULL COM…

【竞技宝jjb.lol】LOL:MSI首日赛事前瞻

北京时间2024年5月1日,英雄联盟2024MSI季中赛将在今天正式开打,今天将进行两场入围赛的比赛,分别为FLY对阵PSG以及T1对阵EST。入围赛的战队实力差距较大,但如今各大赛区的实力越来越小,即使是外卡赛区的队伍也有爆冷的可能,下面小编就为大家带来MSI首日赛事前瞻。 FLY VS PSG …

LEETCODE 946. 验证栈序列

class Solution:def validateStackSequences(self, pushed: List[int], popped: List[int]) -> bool:stack[]n0for item in pushed:stack.append(item)while(stack and stack[-1]popped[n]):stack.pop()n1return not stack

开箱子咸鱼之王H5游戏源码_内购修复优化_附带APK完美运营无bug最终版__GM总运营后台_附带安卓版本

内容目录 一、详细介绍二、效果展示2.效果图展示 三、学习资料下载 一、详细介绍 1.包括原生打包APK&#xff0c;资源全部APK本地化&#xff0c;基本上不跑服务器宽带 2.优化后端&#xff0c;基本上不再一直跑内存&#xff0c;不炸服响应快&#xff01; 3.优化前端&#xff0c…

菜鸡学习netty源码(一)——BootStrap

1.概述 对于初学者而然,写一个netty本地进行测试的Server端和Client端,我们最先接触到的类就是ServerBootstrap和Bootstrap。这两个类都有一个公共的父类就是AbstractBootstrap. 那既然 ServerBootstrap和Bootstrap都有一个公共的分类,那就证明它们两个肯定有很多公共的职…

贪心算法 Greedy Algorithm

1) 贪心例子 称之为贪心算法或贪婪算法&#xff0c;核心思想是 将寻找最优解的问题分为若干个步骤 每一步骤都采用贪心原则&#xff0c;选取当前最优解 因为没有考虑所有可能&#xff0c;局部最优的堆叠不一定让最终解最优 v2已经不会更新v3因为v3更新过了 贪心算法是一种在…

GPT-ArcGIS数据处理、空间分析、可视化及多案例综合应用

在数字化和智能化的浪潮中&#xff0c;GIS&#xff08;地理信息系统&#xff09;和GPT&#xff08;生成式预训练模型&#xff09;的结合正日益成为推动科研、城市规划、环境监测等领域发展的关键技术。GIS以其强大的空间数据处理、先进的空间分析工具、灵活的地图制作与可视化能…