【编程基础】System.arraycopy()和 Arrays.copyOf()
在Java中如果要copy一个数组有两种系统api可以使用System.arraycopy()和Arrays.copyOf()。那么这两个方法有什么不同吗?下面一个例子来给大家展示一下:
1、System.arraycopy()
int[] arr = {1,2,3,4,5};
int[] copied = new int[10];
System.arraycopy(arr, 0, copied, 1, 5);//5 is the length to copy
System.out.println(Arrays.toString(copied));
Output:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 2, 3, 4, 5, 0, 0, 0, 0]
2、Arrays.copyOf()
int[] copied = Arrays.copyOf(arr, 10); //10 the the length of the new arraySystem.out.println(Arrays.toString(copied)); copied = Arrays.copyOf(arr, 3);System.out.println(Arrays.toString(copied)); |
---|
Output:
[1, 2, 3, 4, 5, 0, 0, 0, 0, 0]
[1, 2, 3]
两种方法的不同之处在于Arrays.copyOf是通过创建一个新的数组来实现的copy,源码如下:
int[] copied = Arrays.copyOf(arr, 10); //10 the the length of the new array
System.out.println(Arrays.toString(copied));
copied = Arrays.copyOf(arr, 3);
System.out.println(Arrays.toString(copied));
System.arraycopy()是往一个已经存在的数组copy,函数源码如下:
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);
src - 源数组。 srcPos - 源数组中的起始位置。 dest - 目标数组。 destPos - 目标数据中的起始位置。 length - 要复制的数组元素的数量。 该方法是用了native关键字,调用的为C++编写的底层函数,可见其为JDK中的底层函数。
总结: 1.copyOf()的实现是用的是arrayCopy()。 2.arrayCopy()需要目标数组,对两个数组的内容进行可能不完全的合并操作。 3.copyOf()在内部新建一个数组,是用arrayCopy()将oldArray内容复制到newArray中去,并且长度为newLength,返回newArray。
- Effective Modern C++翻译(5)-条款4:了解如何观察推导出的类型
- Effective Modern C++翻译(4)-条款3:了解decltype
- 大白话-constructor
- Effective Modern C++翻译(3)-条款2:明白auto类型推导
- React Native在Android平台运行gif的解决方法
- Effective Modern C++翻译(2)-条款1:明白模板类型推导
- Android ormLite复杂条件查询
- Effective Modern C++翻译(1):序言
- C++操作mysql方法总结(2)
- Linux基础(day3)
- C++操作mysql方法总结(1)
- javascript实现最基本、最简单的继承
- C++操作mysql方法总结(3)
- 8.5 输入输出重定向
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- centos6编译及安装ZLMediaKit解析
- CentOS7.5安装配置Harbor1.7的全过程
- Linux CentOS 定时运行脚本配置的方法
- 从Centos7升级到Centos8的教程(图文详解)
- Linux(Centos7)下redis5集群搭建和使用说明详解
- CentOS7下安装yum源及上传下载命令rz、sz安装方法(图解)
- C#实例:四路激光测距雷达数据采集和波形图绘制
- Linux 中有效用户组和初始用户组的实现
- ubuntu 16.04 64位兼容32位程序三步曲
- crontab执行结果未通过发送mail通知用户的方法
- 如何将CentOS7升级至CentOS8(详细步骤)
- leetcode树之二叉树的所有路径
- 如何利用Bash脚本监控Linux的内存使用情况
- Ubuntu18 给terminal改个漂亮的命令行提示符的方法
- leetcode树之将有序数组转换为二叉搜索树