System.arraycopy和Arrays.copyOf的原理解剖
数组的复制其实在很多业务情况下会用到,不同的业务情况下选择适合的方式来实施复制是每个开发人员要考虑的事情。
那么System.arraycopy
、Arrays.copyOf
到底是如何复制的呢?接下来就一起来讨论一下吧。
arraycopy
arraycopy
是System提供的native
静态方法,方法原型如下;
public static native void arraycopy(Object arg, int arg0, Object arg1, int arg2, int arg3);复制代码
参数arg:源数组对象
arg0:源数组的起始位置
arg1:目标数组对象
arg2:目标数组的起始位置
arg3:要复制的元素数量
copyOf
Arrays
类中存在着copyOf
的很多种实现方式,在进行数组的复制过程中,我们只需要调用其中一种即可,调用方式如下;
Arrays.copyOf(elementData, size);复制代码
参数elementData:源数组对象
size:目标数组的长度
来看一下copyOf的源码,如下;
首先,创建了一个和源数组元素相同类型的新数组;
接着调用了System.arraycopy函数,并且在arraycopy函数最后一个参数(要复制的元素数量)取了设置的size值和源数组长度两者的最小值;
最后返回了新数组。
欢迎大家关注我的公众号:Ijiran的编程思维。特别声明:未经允许,禁止任何形式的转载!
Java源码原理解析、大量面试经验分享。
System.arraycopy和Arrays.copyOf的原理解剖相关推荐
- 数组复制速度 System.arraycopy()clone() Arrays.copyof() for()探究
先申明复制速度结果 System.arraycopy() clone() Arrays.copyof() for() 背后原理探究 首先要申明的是这4种方法中的前3种是没有本质区别的,对象都是浅复制( ...
- System.arraycopy()和 Arrays.copyOf()的区别联系(源码深度解析copyOf扩容原理)
1.System.arraycopy()方法 public static void arraycopy(Object src, int srcPos, Object dest, int destPos ...
- System.arraycopy 和Arrays.copyOf
1.Arrays.copyOf()的实现是用的是System.arrayCopy(); 2.System.arrayCopy()需要目标数组,对两个数组的内容进行可能不完全的合并操作. 3.Array ...
- java arraycopyof_Java中System.arraycopy()和Arrays.copyOf()的区别
System.arraycopy() 这是一个由java标准库提供的方法.用它进行复制数组比用for循环要快的多. arraycopy()需要的参数有:源数组,从源数组中的什么位置开始复制的偏移量,目 ...
- 再谈System.arraycopy和Arrays.copyOf
之前转载过一篇博文,介绍过这两个方法,今天想要再次详细的了解一下. public static native void arraycopy(Object src, int srcPos,Object ...
- System.arraycopy和Arrays.copyOf的关系
参考连接: https://www.cnblogs.com/happyxiaoyu/p/5786971.html https://blog.csdn.net/expect521/article/det ...
- java中arraycopy的用法_[jdk源码阅读系列]Java中System.arraycopy()的用法
本文转载,原文链接: 3分钟了解Java中System.arraycopy的用法 - 伊万夫斯基 - 博客园 https://www.cnblogs.com/benjieqiang/p/114288 ...
- System.arraycopy(src, srcPos, dest, destPos, length) 与 Arrays.copyOf(original, newLength)区别
//System.arraycopy,只拷贝已存在的数组元素 int[] src = {0, 1, 2}; int[] dest = new int[3]; System.arraycopy(src, ...
- Arrays.copyOf()、Arrays.copyOfRange()与System.arraycopy()用法
public class Test {public static void main(String[] args) {int[] a = {1,2,3,4,5,6,7,8};//数组b复制a的前五个元 ...
最新文章
- Mysql Cluster节点类型
- python 错误、调试和测试
- MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM)
- VIBE复现过程,使用nvidia和libOpenGL.so渲染出错及解决方案
- Eclipse:Target runtime XXX is not defined
- c语言随机产生四位数,习题:随机产生N个四位正整数,将其中的素数选出,并升序排列之输…...
- PCB 生产周期计算逻辑与代码实现
- golang学习和使用经验总结
- mysql 索引 hash_Mysql中索引类型,B-tree、Hash索引怎么实现的以及其特点?
- (转)Shell脚本之break,continue,和exit区别
- QProcess 使用
- 银行固定资产管理系统盘点方案
- css拖动音乐进度条,利用CSSclip实现音频播放圆环进度条教程实例
- 在IE浏览器访问网址时显示证书错误,导航已阻止
- 公章,加盖公章,英语怎么说?
- 国外设计博客小组收集
- 刷脸支付互联网巨头纷纷从线上走到线下
- 非组蛋白带什么电荷_非组蛋白是构成真核生物染色体的基本结构蛋白,富含带正电荷的精氨酸(Arg)和赖氨酸(Lys)等碱性...
- 已知函数fx=sin(wx+φ)_考点13 y=sin(wx+φ)的图像与性质(解析版)
- 360 度反馈过程的目标
热门文章
- 用800行代码做个行为树(Behavior Tree)的库(2
- c++学习笔记之基础---类内声明函数后在类外定义的一种方法
- Android sdk manager更新下载缓慢的解决方法
- 128条形码计算,利用Code 128字体实现条码打印
- php通用检测函数集合
- tabcontainer控件太长_asp.net AjaxControlToolKit--TabContainer控件的介绍
- OSINT系列:网站信任评估WOT
- php error log 函数,php日志函数error_log如何使用 php日志函数error_log用法介绍
- ipv6简写还原_用什么进制表示ipv6
- 自定义的代码块怎么移到别的电脑上