首页 > 编程语言 >【java基础-实战2】数组拷贝的几种实现方式

【java基础-实战2】数组拷贝的几种实现方式

时间:2023-10-26 10:03:04浏览次数:36  
标签:src java String res length 数组 拷贝

在实际的业务开发中,基本上很少很少很少…会遇到数组拷贝的场景,甚至是我们一般
都不怎么用数组,List它不香嘛,为啥要用数组。 那么现在这个问题有点冷门,要实现数组拷贝,怎么办呢?

1、基础写法:循环赋值

最简单直接的写法,那就是新建一个数组,一个一个拷贝进去

String[] src = new String[]{"a", "b, "c"}; 
String[] res = new String[src.length];
for (int i = 0; i < src.length; i ++) {
      res[i] = src[i];
 }

2、Array.copyOf

直接使用Array.copy, 一行代码搞定。

String[] src = new String[]{"a", "b, "c"}; 
String[] res =  Arrays.copyOf(src, src.length);

3、借用Arrays中转

数组用起来有点麻烦,还是用容器舒爽,借助List来实现数组的拷贝,也就几行代码。

String[] src = new String[]{"a", "b, "c"}; 
 List<String> list = Arrays.asList(src); 
String[] res = new String[list.length];
 list.toArray(res);

4、System.arraycopy

除了上面的,还可以使用更基础的用法:System.arraycopy

String[] src = new String[]{"a", "b, "c"}; 
String[] res = new String[src.length]; 
System.arraycopy(src, 0, res, 0, src.length);

如果有看过jdk源码的同学,上面这个用法应该不会陌生,特别是在容器类,这种数组拷贝的方式比较常见

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

参数说明:

  • src : 原数组
  • srcPos: 原数组用于拷贝的起始下标 dest: 拷贝后的数组
  • destPos: 目标数组的小标
    = length: 原数组中拷贝过去的数组长度
    从上面的描述也能看出来,System.arraycopy比较强大,这个方法不仅能实现数组拷贝,还可以实现数组内指定片段的拷贝。


标签:src,java,String,res,length,数组,拷贝
From: https://blog.51cto.com/u_6813689/8030088

相关文章

  • Java基础 解压缩流、压缩流
     解压缩流就是读取压缩包中的文件,所以它是读,属于输入流压缩流就是把文件中的数据写到压缩包中,所以它是写,属于输出流 压缩包里面的每一个文件或文件夹在Java当中都是一个ZipEntry对象所以解压的本质其实就是把压缩包里面的每一个ZipEntry对象按照层级结构......
  • java学习_06
    for循环publicclassday6_01{publicstaticvoidmain(String[]args){//1.循环1~5得到里面的每一个数字//开始条件:1//结束条件:5//用来进行累加的intsum=0;for(inti=1;i<=5;i++){......
  • Java基础 字符打印流
    字符流底层有缓冲区,所以效率更高,想自动刷新需要手动开启 字符打印流的构造方法: 字符打印流的成员方法: 代码示例:PrintWriterpw=newPrintWriter(newFileWriter("E:\\Java基础资料\\b.txt"),true);pw.println("黑马程序员");pw.print("成就it黑马");pw.println();p......
  • java学习_05
    if语句lf语句的第一种格式执行流程:I.首先计算关系表达式的值II.如果关系表达式的值为true就执行语句体III.如果关系表达式的值为false就不执行语句体IV.继续执行后面的其他语句if的注意点:大括号的开头可以另起一行书写,但是建议写在第一行的末尾......
  • Java基础 打印流、字节打印流
      打印流是高级流,也是用来包装基本流的但是打印流不能读,只能写,所以打印流只有输出流 打印流分为两种:PrintStream、PrintWriter两个类1.PrintStream  →  字节打印流2.PrintWriter  →  字符打印流 打印流的特点:1.打印流只能操作文件目的地,不能操作......
  • java01下载typora
    1.在软件管理下载typora,只能试用15天2.新建一个文件夹a,然后里面建一个txt文档,把文档后缀改成md,类型变成MarkDownfiel3.打开a,打开大纲,右键可以输入内容,样式 ......
  • Java拾贝第十一天——IO流之字节流复制图片、视频
    Java拾贝不建议作为0基础学习,都是本人想到什么写什么文件在硬盘或传输时都以字节的形式进行传输。包括图片、视频等。思路:先定位源文件file1作为源文件,file2作为复制文件使用字节流输入流读取file1使用字节流输出流输出file2关闭流。定位源文件,我特地翻出来一张学校......
  • C# 在流行度指数上将超过Java
    2023年10月最新的TIOBE编程语言流行指数表明:C#和Java之间的差距从未如此之小,目前,差异仅为1.2%,如果趋势保持这种状态,C#将在大约2个月内超过Java,TIOBESoftware首席执行官PaulJansen的认为,C#的崛起是以牺牲Java为代价的-Oracle和Kotlin是Java衰落的主要因素。TIOBE指数每月跟踪编......
  • 在Java中,public、protected、包私有(package-private)和私有(private)之间的区别是什么?
    内容来自DOChttps://q.houxu6.top/?s=在Java中,public、protected、包私有(package-private)和私有(private)之间的区别是什么?在Java中,在使用class和interface以及处理继承时,是否有明确的规定何时使用每个访问修饰符,即默认(包私有)、public、protected和private?官方教程(http://doc......
  • java学习每日总结-第五天
    第五天学习//美好的一天,从学java开始今天首先是tomcat的体验,其实这个玩意很早以前就一直在用了,不过吧对他的理解约等于没有,现在知道了tomcat是一个web服务器,用来连接网页和服务器。  学完tomcat之后,终于来到了我之前一直缺少的一部分重要的知识,servlet!  学习了几个小......