首页 > 其他分享 >Arrays.copyOfRange学习

Arrays.copyOfRange学习

时间:2022-09-03 11:36:55浏览次数:94  
标签:Arrays copyOfRange System 学习 int 复制 数组 方法 arraycopy

Arrays.copyOfRange的使用方法

功能:实现数组的拷贝功能,将数组拷贝至另外一个数组
参数:

original:第一个参数为要拷贝的数组对象
from:第二个参数为拷贝的开始位置(包含)
to:第三个参数为拷贝的结束位置(不包含)

有多个重载方法,可以复制各种类型的数组。

 示例:

import java.util.*;
public class leetcode {
    public static void main(String[] args) {
        int[] array = {0, 1, 2, 3, 4, 5, 6,7,8};
        int[] array2 = Arrays.copyOfRange(array, 2, 6);
        System.out.println(Arrays.toString(array2));
    }
}

输出:

[2, 3, 4, 5]
注意不包含右边界

源码解析

copyOfRange()方法的源码如下:

在该方法内做了四件事:

(1)计算新数组的长度,由于指定了开始索引和结束索引,所以新数组的长度是可以计算的。
(2)创建一个数组,该数组用来存放复制的元素。
(3)调用System.arraycopy()方法来复制数组,注意srcPos参数的值变为了from,即源数组的起始索引,而复制的结果数组当然是从索引为0的位置开始填充元素。
(4)返回复制完成的结果数组。

与之类似的方法:copyOf()

/*
    public static <T> T[] copyOf(T[] original, int newLength)
        方法说明:
            属于Arrays类的静态方法,可以通过类名直接调用,作用是复制指定长度的数组
        参数说明:
            T[] original    泛型,指的是要传入的源数组,即会被复制的数组,可以是String[],Integer[]等,有多个重载方法
            int newLength   整型,指的是要复制的长度,也是新数组的长度
                1.如果newLength不合法,即小于0,那么抛出NegativeArraySizeException异常
                2.如果newLength小于源数组长度,则复制指定长度的数组元素
                3.如果newLength大于源数组长度,则新数组中超出源数组长度的元素则是默认值
       返回值说明:
            T[]     返回的是一个泛型,指的是复制成功的结果数组
 */

其也有多个重载方法,能够复制各种类型的数组:

 示例:

public class Demo {
    public static void main(String[] args) {
        String[] originArr = new String[]{"张三", "李四", "王五", "赵六"};
        String[] newArr = Arrays.copyOfRange(originArr, 1, 3);
        printArr(newArr);
    }
 
    static void printArr(String[] arr) {
        for (String s : arr) {
            System.out.print(s + "\t");
        }
        System.out.println();
    }
}
/**
 * 打印结果:
 * 李四 王五
 */

源码解析

copyOf()方法的源码如下:

在该方法内做了三件事:

(1)创建一个数组,该数组是复制的结果数组。
(2)调用System类的arraycopy()方法复制数组,注意其实索引都是0,表示从第一个元素开始复制。
(3)返回复制完成的数组。

System.arraycopy()方法

发现copyOf()和copyOfRange()方法的底层都是调用System.arraycopy()方法实现。

System.arraycopy()方法说明:

/*
    public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
        方法说明:
            属于System类的静态方法,可以通过类名直接调用,作用是复制从指定索引开始的指定长度的数组
        参数说明:
            Object src      源数组,可以是任何类型的
            int srcPos      源数组的起始索引,即要复制的源数组的开始位置,结束位置通过长度来锁定
            Object dest     目标数组,也就是复制的结果数组
            int destPos     目标数组的起始位置,一般从0开始,也可以是其他索引
            int length      要复制的元素个数
       注意事项:
            1.该方法被native修饰,表示底层使用C或C++实现的,不属于Java范畴
 */

System.arraycopy()方法的源码:

没有任何实现的方法体,使用了native修饰方法,表示底层使用C或C++实现,不属于Java范畴。

 Ref:(97条消息) Java高级之Arrays类的copyOf()和copyOfRange()方法以及System.arraycopy()方法介绍_二木成林的博客-CSDN博客_copyofrange

标签:Arrays,copyOfRange,System,学习,int,复制,数组,方法,arraycopy
From: https://www.cnblogs.com/cy0628/p/16652216.html

相关文章

  • 机器学习(二)
    当预测的变量y是一个离散值的情况下的分类问题在分类问题中分为正类和负类,通常情况下认为没有某样东西是父类二元分类算法及多元分类算法使用线性回归算法对数据进行拟......
  • springboot学习
    springboot学习官方文档:https://spring.io/projects/spring-boot1、简介1.1、什么是spirngboot?springboot在spring的基础之上,搭建起来的框架,能够帮助我们整合市面上......
  • 2022-2023-1 20211319蓝宇 《信息安全专业导论》第一周学习总结
    作业信息|这个作业属于哪个课程|2020-2021-1信息安全专业导论(https://edu.cnblogs.com/campus/besti/2020-2021-1fois))||这个作业要求在哪里|[2020-2021-1信息安全专业......
  • 2022-2023-1 20221304 《计算机基础与程序设计》第一周学习总结
    作业信息班级:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01作业目标:快速浏览教材作业正文:ht......
  • Electron学习(一)
    1.什么是Electron:Electron是使用HTML、JavaScript和CSS构建的跨平台桌面应用程序。2.特点及优势:web技术:基于Chromium、Node.js跨平台:Electron兼容Mac、Windows和L......
  • 2022-2023-1 20221304《计算机基础与程序设计》第一周学习总结
    2022-2023-120221304《计算机基础与程序设计》第一周学习总结作业信息班级:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/......
  • JavaScript学习
    一、什么是JavaScriptJavaScript世界上最流行的脚本语言一个合格的后端人员,必须精通JavaScript二、快速入门2.1、引入JavaScript内部引入<!DOCTYPEhtml><htmlla......
  • Dubbo学习
    Dubbo前言1.1大型互联网项目架构目标1.2集群和分布式概念集群:很多“人”一起,干一样的事。一个业务模块,部署在多台服务器上。分布式:很多“人”一起,干不一......
  • Flask 学习-41.Flask-RESTPlus 入门到放弃
    前言Flask-restfull是flask框架开发接口的一个框架,Flask-RESTPlus是Flask-restfull升级版,功能做了一些优化,主要是可以生成swagger在线文档了。环境准备先安装Flask......
  • 2022-08-31 卢睿 学习心得
    目录1.JSPJSP表达式JSP声明片段JSP的指令标识JSP标签内置标签JSTL标签自定义标签JSP的作用域2.EL表达式EL表达式的内置作用域对象EL表达式的缺陷面试题JSP和Servlet的区别i......