实战小技巧11:数组拷贝

简介: 说实话,在实际的业务开发中,基本上很少很少很少...会遇到数组拷贝的场景,甚至是我们一般都不怎么用数组,List它不香嘛,为啥要用数组现在问题来了,要实现数组拷贝,怎么整?

说实话,在实际的业务开发中,基本上很少很少很少...会遇到数组拷贝的场景,甚至是我们一般都不怎么用数组,List它不香嘛,为啥要用数组


现在问题来了,要实现数组拷贝,怎么整?


1. 基础写法



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

String[] data = new String[]{"1", "2", "3"};
String[] ans = new String[data.length];
for (int index = 0; index < data.length; index ++) {
    ans[index] = data[index];
}
复制代码


2. 借用容器中转



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

String[] data = new String[]{"1", "2", "3"};
List<String> list = Arrays.asList(data);
String[] out = new String[data.length];
list.toArray(out);
复制代码


3. Array.copy



上面这个有点绕得远了, 直接使用Array.copy

String[] data = new String[]{"1", "2", "3"};
String[] out = Arrays.copyOf(data, data.length);
复制代码


4. System.arraycopy



除了上面的,还可以使用更基础的用法

String[] data = new String[]{"1", "2", "3"};
String[] out = new String[data.length];
System.arraycopy(data, 0, out, 0, data.length);
复制代码


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


参数说明:

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


  • src : 原数组
  • srcPos: 原数组用于拷贝的起始下标
  • dest: 拷贝后的数组
  • destPos: 目标数组的小标
  • length: 原数组中拷贝过去的数组长度


从上面的描述也能看出来,这个方法不仅能实现数组拷贝,还可以实现数组内指定片段的拷贝



相关文章
【面试题精讲】深拷贝和浅拷贝区别了解吗?什么是引用拷贝?
【面试题精讲】深拷贝和浅拷贝区别了解吗?什么是引用拷贝?
|
5月前
|
设计模式 Java C++
数据结构篇:数据拷贝、深拷贝、重载与移动构造
数据结构篇:数据拷贝、深拷贝、重载与移动构造
24 0
|
API
数组拷贝问题:api接口
数组拷贝问题:api接口
47 0
|
算法 C++
复制带随机指针的链表:奇妙的拷贝之旅
题目要求对一个带有随机指针的链表进行深拷贝,复制链表中的节点值、next 指针和 random 指针都应指向复制链表中的新节点。我们需要设计一个算法,满足这些条件,输入为原链表的头节点 head。
101 0
|
Java
【Java】文件的拷贝(直接拷贝,借助缓冲区拷贝)完整代码实现
【Java】文件的拷贝(直接拷贝,借助缓冲区拷贝)完整代码实现
105 0
|
C++
【C++知识点】值拷贝&地址拷贝
【C++知识点】值拷贝&地址拷贝
101 0
|
编译器 C++
C/C++中的三种拷贝方式
C/C++中的三种拷贝方式
138 0
六个方法两个拷贝带你透彻对象合并问题
实际场景下,我们经常需要进行对象合并的操作,而有时候原对象的改变会改变合并后的对象,这是一个非常严重的问题,涉及到了合并对象中的深浅拷贝,递归遍历,让人发蒙。
149 1
|
开发者 Python
数组保存|学习笔记
快速学习数组保存
105 0
|
编译器 C++
C++中要完整拷贝对象
C++中要完整拷贝对象
173 0