JavaSE基础语法--数组的拷贝

news2024/11/16 15:57:18

数组的拷贝方法有好几种,第一种是简单的for循环。通过遍历原数组来给新数组赋值完成数组的拷贝代码如下:

import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
      int[] arr1={1,2,3,4,5,6};
      int[] arr2=new int[arr1.length];
        for (int i = 0; i <arr1.length ; i++) {
            arr2[i]=arr1[i];
        }
        System.out.println(Arrays.toString(arr1));
        System.out.println(Arrays.toString(arr2));

       }
    }

输出结果如下:


第二种是用我们的Arrays这个类里面封装好的一个方法叫copyOf,代码如下:

import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
      int[] arr1={1,2,3,4,5,6};
       int[] ret=Arrays.copyOf(arr1,arr1.length);
        System.out.println(Arrays.toString(ret));

       }
    }

 它需要2个参数,一个是需要拷贝的数组,一个是拷贝的长度。这个函数的原型会返回一个数组,因此我们需要用一个数组去接受它。输出如下:


这个copyOf方法不仅能拷贝原始数组,还能对数组进行扩容。只需要在第二个参数那填入想要的数组长度即可,比如说我想扩容为原数组的2倍,代码如下:

import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
      int[] arr1={1,2,3,4,5,6};
       int[] ret=Arrays.copyOf(arr1,arr1.length*2);
        System.out.println(Arrays.toString(ret));

       }
    }

输出结果如下:


 第三种方法我们可以调用copyOf的底层实现来进行拷贝:

 这是copyOf的实现,其实他是调用了一个arraycopy方法。这个方法是一个本地方法,底层是由C/C++实现的,因此我们只能看到函数原型,看不到实现逻辑,但是我们可以直接使用它。

public static native void arraycopy(
Object src //从哪里开始拷贝,  
int  srcPos //从拷贝数组的哪个位置开始拷贝,
Object dest //拷贝到那个数组, 
int destPos //从新数组的哪个位置开始拷贝,
int length //拷贝的长度
);

这是arraycopy的原型,我加以注释,下面我们试验一下代码如下:

import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
      int[] arr1={1,2,3,4,5,6};
      int[] arr2=new int[arr1.length];
      System.arraycopy(arr1,0,arr2,0,arr1.length);
        System.out.println(Arrays.toString(arr1));
        System.out.println(Arrays.toString(arr2));

       }
    }

输出结果如下:

这个方法支持部分拷贝,也就是区间拷贝,比如说我想从原数组的第2个位置开始拷贝,如图:

因为数组下标是从0开始的,所以第二个位置也就是1,同时arr1.length要-1,不然会报错。


Arrays类还提供了一种支持范围拷贝的方法--copyOfRange方法,代码如下:

import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
      int[] arr1={1,2,3,4,5,6};
      int[] ret=Arrays.copyOfRange(arr1,1,5); //这个范围是左闭右开的,因此实际上只有2,3,4,5
        System.out.println(Arrays.toString(arr1));
        System.out.println(Arrays.toString(ret));
       }
    }

输出如下:


数组的拷贝还有一种方式,利用克隆的方式产生一个副本完成拷贝,代码如下:

import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
      int[] arr1={1,2,3,4,5,6};
      int[] arr2=arr1.clone();
        System.out.println(Arrays.toString(arr2));

       }
    }

输出如下:


 

数组的拷贝暂时介绍这么多,Arrays这个类是很强大的处理数组的一个类,里面集成了很多超级好用的方法,比如说判断两个数组相等,代码如下:

import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
      int[] arr1={1,2,3,4,5,6};
      int[] arr2={1,2,3,4,5,6};
        System.out.println(Arrays.equals(arr1,arr2));
       }
    }

 输出结果如下:


再比如说,对一个数组一次性初始化,写一个for循环未免太过于麻烦,因此Arrays中有一个方法叫 fill,我们尝试一下代码如下:

import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
      int[] arr1={1,2,3,4,5,6};
        Arrays.fill(arr1,10);
        System.out.println(Arrays.toString(arr1));

       }
    }

输出如下:

 

它能一次性帮我们初始化,非常方便。fill还能局部赋值,有兴趣的可以去查查文档。

 

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

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

相关文章

MySQL高级SQL语句操作之存储过程

MySQL高级SQL语句操作之存储过程 一、存储过程介绍二、存储过程操作1、创建存储过程2、调用存储过程3、查看存储过程4、存储过程的参数5、删除存储过程6、存储过程的控制语句6.1 条件语句6.2 循环语句 一、存储过程介绍 存储过程是一组为了完成特殊功能的SQL语句集合存储过程在…

Tik Tok 如何提高账户的活跃度和吸引力?

Tik Tok 是一款非常受欢迎的应用程序&#xff0c;它在全球范围内拥有大量的用户和创作者。Tik Tok 在人工智能技术方面投入了大量的资源&#xff0c;并且正在不断改进和扩展其人工智能技术。Tik Tok 正在不断扩展其业务&#xff0c;例如在音乐、视频制作等方面扩展。这表明 Tik…

如何提升虚拟机性能?除了绑核还有它可以!

第一章 大页内存与小页内存 1.1 小页内存 在Linux系统中&#xff0c;默认情况下&#xff0c;内存管理器将物理内存划分为小页(4KB)或大页(2MB或1GB)的大小。Linux内核会根据需要分配和释放内存&#xff0c;以确保系统的稳定性和性能。 在默认情况下&#xff0c;Linux系统会使用…

在spring事务中扩展业务操作;spring事务同步器TransactionSynchronizationManager

概述 业务上经常会有一些需求是需要在某个数据库操作事务提交之后再去操作。 我常用的就方式有TransactionalEventListener和TransactionSynchronizationManager. 其实TransactionalEventListener背后使用的也是TransactionSynchronizationManager。 注意点&#xff1a;在a…

爬虫(Requests库get和post应用)

Requests库 介绍 Requests是Python中用于进行HTTPS请求的库。它提供了一种简单直观的API&#xff0c;用于发送HTTP&#xff0c;HTTPS请求和处理响应。 request.get()函数 参数 url&#xff0c;一般放置需要请求的URL headers&#xff0c;一般用于User-agent&#xff08;UA…

制定CRM战略流程是哪些?

CRM战略是企业为了提升核心竞争力&#xff0c;在市场、销售、客户管理等方面开展的一系列改善、创新或转型的措施。目的是建立和维护与客户的关系&#xff0c;增加企业的收入。那么&#xff0c;企业如何制定CRM战略呢&#xff1f; 1、深入了解客户需求 企业需要了解其目标客户…

【算法总结】——子集型回溯

文章目录 子集型回溯例题1——78.子集代码模板1代码模板2 例题2——131.分割回文串代码模板1代码模板2补充&#xff1a;怎么判断回文串双指针dp提前处理 参考资料 子集型回溯 主要学习 分别从 输入 和 答案 去思考的两种代码模板。 例题1——78.子集 例题&#xff1a;78. 子集…

JavaSE基础语法--数组(1)

数组的定义与使用 数组就是存储相同数据类型的一组数据。它有如下特点&#xff1a; 1.数组中存放的数据是一样的 2.数组的空间是连续的 3.每个空间有自己的编号&#xff0c;其实位置的编号为0&#xff0c;即数组的下标 那么在Java里面如何定义一个数组呢&#xff1f; 假设…

【Python入门】Python循环语句(for循环的嵌套应用)

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于Python零基础入门系列&#xff0c;本专栏主要内容为Python基础语法、判断、循环语句、函…

行为型模式--中介者模式

目录 概述 结构 案例实现 优缺点 优点&#xff1a; 缺点&#xff1a; 使用场景 概述 一般来说&#xff0c;同事类之间的关系是比较复杂的&#xff0c;多个同事类之间互相关联时&#xff0c;他们之间的关系会呈现为复 杂的网状结构&#xff0c;这是一种过度耦合的架构&a…

深入理解深度学习——BERT派生模型:跨语言模型XLM(Cross-lingual Language Model)

分类目录&#xff1a;《深入理解深度学习》总目录 BERT本应在语义理解上具有绝对优势&#xff0c;但其训练语料均为英语单语&#xff0c;受限于此&#xff0c;早期的BERT只在英语文本理解上有优势。随着全球化进程的加速&#xff0c;跨语言的预训练语言模型也具有非常重要的应用…

seldom之数据驱动

seldom之数据驱动 如果自动化某个功能&#xff0c;测试数据不一样而操作步骤是一样的&#xff0c;那么就可以使用参数化来节省测试代码。 seldom是我在维护一个Web UI自动化测试框&#xff0c;这里跟大家分享seldom参数化的实现。 GitHub&#xff1a;GitHub - SeldomQA/seld…

idea设置项目编码为utf8

设置当前项目的编码为utf8 File -> Settings -> Editor -> File Encoding&#xff1a; 设置新建项目的编码为utf8 File -> New Projects Setup -> Settings for New Projects&#xff1a;

Flutter系列(九)ListView实现新闻列表和正文布局

基础工程&#xff1a; Flutter系列&#xff08;四&#xff09;底部导航顶部导航图文列表完整代码_摸金青年v的博客-CSDN博客 相关文章: Flutter系列&#xff08;七&#xff09;ListView 图文列表详解_flutter 图文列表_摸金青年v的博客-CSDN博客 一、前言 本文用flutter实现新闻…

注册 Google 邮箱(最新:保姆级教程)

文章目录 1、我们使用浏览器打开谷歌邮箱官网&#xff08;gmail.google.com&#xff09;&#xff0c;进入谷歌邮箱的登录主页&#xff0c;我们点击左下方的创建账号按钮&#xff0c;选择个人用途 2、在进入的界面我们不要着急填写资料&#xff0c;我们先修改语言&#xff0c;点…

(2023,3D 场景生成器 Infinigen)使用程序化生成的无限逼真世界

Infinite PhotorealisticWorlds using Procedural Generation 公众号&#xff1a;EDPJ 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 4. 实验 参考 S. 总结 S.1 主要思想 S.2 方法 S.3 场景生成 0. 摘要 我们介绍 Infinigen&#xff0c;一个自然世界逼真 3D 场景的…

Verilog | 除法--试商法

试商法 采用试商法实现除法运算&#xff0c;对于32位的除法&#xff0c;需要至少32个时钟周期才能得到除法结果。下面是试商法的一般过程。 设被除数是m&#xff0c;除数是n&#xff0c;商保存在s中&#xff0c;被除数的位数是k&#xff0c;其计算步骤如下&#xff08;为了便…

leetcode814. 二叉树剪枝(java)

二叉树剪枝 leetcode814. 二叉树剪枝题目描述DFS 深度优先遍历 二叉树专题 leetcode814. 二叉树剪枝 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/binary-tree-pruning 题目描述 给你二叉树的根结点 root &#xff0c…

《机器学习公式推导与代码实现》chapter17-kmeans

《机器学习公式推导与代码实现》学习笔记&#xff0c;记录一下自己的学习过程&#xff0c;详细的内容请大家购买作者的书籍查阅。 聚类分析和k均值聚类算法 聚类分析(cluster analysis)是一类经典的无监督学习算法&#xff0c;在给定样本的情况下&#xff0c;聚类分析通过度量…

【半监督:交叉分辨率:解纠缠】

Cross-Resolution Semi-Supervised Adversarial Learning for Pansharpening &#xff08;用于泛锐化的交叉分辨率半监督对抗学习&#xff09; 现有的基于深度神经网络&#xff08;DNN&#xff09;的方法已经产生了良好的泛锐化图像。然而&#xff0c;监督DNN为基础的泛锐化方…