【Java】复制数组的四种方式
作者:小教学发布时间:2023-10-02分类:程序开发学习浏览:92
导读:1.System.arraycopy()用来将一个数组的(一部分)内容复制到另一个数组里面去。定义:voidarraycopy(Objectsrc,intsr...
1. System.arraycopy()
用来将一个数组的(一部分)内容复制到另一个数组里面去。
定义:
void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
例:
int[] arr1 = { 1, 2, 3, 4, 5 };
int[] arr2 = new int[10];
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
如果传入的参数为 null
、传入的参数不是数组、无法将原数组的类型转换为目标数组的类型、目标数组长度不够,都会抛出异常。
见文档。
2. arr.clone()
这个方法实际上是从 Object
里继承过来的。用来克隆本数组,返回一个新数组。
定义:
protected Object clone();
例:
int[] arr1 = { 1, 2, 3, 4, 5 };
int[] arr2 = null;
arr2 = arr1.clone();
见文档。
3. Arrays.copyOf()
Arrays
位于 import java.util.Arrays
下。
这个函数有两个版本:
<T> T[] java.util.Arrays.copyOf(T[] original, int newLength)
<T, U> T[] java.util.Arrays.copyOf(U[] original, int newLength, Class<? extends T[]> newType)
见文档。
<T>
复制指定数组为一个新的、指定长度的数组。
新长度可以:
- 和原来的一样长:全部复制
- 比原来的短:只复制源数组前面一部分
- 比原来的长:新数组多余的部分用
null
填充
<T, U>
复制指定数组为一个新的、指定长度、指定类型的数组。
源数组里的内容会被自动转换为新数组的类型。但注意,源数组的元素类型必须可以被转换为新类型,否则会抛出 ArrayStoreException
异常。
例:
Integer[] arr1 = { 1, 2, 3, 4, 5 };
// 注意 <T,U> 版本的第三个参数 `newType` 是目标数组类型,不是目标数组元素类型
// 所以应该是 Object[].class,而不是 Object.class
Object[] arr2 = Arrays.copyOf(arr1, 4, Object[].class);
for (Object object : arr2) {
System.out.println(object);
}
4. Arrays.copyOfRange()
这个方法同样有两个定义:
<T> T[] copyOfRange(T[] original, int from, int to);
<T,U> T[] copyOfRange(U[] original, int from, int to, Class<? extends T[]> newType);
Arrays.copyOfRange()
和 Arrays.copyOf()
,差不多,只是前者可以指定起始位置而已。
总结
四种方法的实现关系(箭头表示“调用了”):
所以 System.arraycopy
和 Object.clone()
的效率要比 Arrays
高。
四种方法的特点比较:
- 程序开发学习排行
-
- 1鸿蒙HarmonyOS:Web组件网页白屏检测
- 2HTTPS协议是安全传输,为啥还要再加密?
- 3HarmonyOS鸿蒙应用开发——数据持久化Preferences
- 4记解决MaterialButton背景颜色与设置值不同
- 5鸿蒙HarmonyOS实战-ArkUI组件(RelativeContainer)
- 6鸿蒙HarmonyOS实战-ArkUI组件(Stack)
- 7鸿蒙HarmonyOS实战-ArkUI组件(GridRow/GridCol)
- 8[Android][NDK][Cmake]一文搞懂Android项目中的Cmake
- 9鸿蒙HarmonyOS实战-ArkUI组件(mediaquery)
- 最近发表
-
- WooCommerce最好的WordPress常用插件下载博客插件模块的相关产品
- 羊驼机器人最好的WordPress常用插件下载博客插件模块
- IP信息记录器最好的WordPress常用插件下载博客插件模块
- Linkly for WooCommerce最好的WordPress常用插件下载博客插件模块
- 元素聚合器Forms最好的WordPress常用插件下载博客插件模块
- Promaker Chat 最好的WordPress通用插件下载 博客插件模块
- 自动更新发布日期最好的WordPress常用插件下载博客插件模块
- WordPress官方最好的获取回复WordPress常用插件下载博客插件模块
- Img to rss最好的wordpress常用插件下载博客插件模块
- WPMozo为Elementor最好的WordPress常用插件下载博客插件模块添加精简版