System类提供的数组拷贝方法:
public static native void arraycopy(Object src,  int  srcPos,
Object dest, int destPos,
int length);

数组拷贝方法,在读ArrayList源码的时候,频繁遇到,刚开始,囫囵吞枣的一带而过,知道个大概意思就算了,
不过,读到下面这里的时候,就有点蒙圈了,这种时段,当然沉下心来,慢慢看看。
public E remove(int index) {
rangeCheck(index); modCount++;
E oldValue = elementData(index); int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // clear to let GC do its work return oldValue;
}

从方法上来看,就是移除list中指定位置的元素,后面的元素依次向前移位1个位置

从底层数组上来看,就是将数组指定位置之后的元素,依次往前移位1个位置(怎么是一样的)

然后就到了正题:

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

src : 原数组

srcPos : 原数组指定位置(指定位置开始)

dest : 目标数组

destPos : 目标数组指定位置(指定位置开始)

length : 移动的元素数量

一句话就是,把src数组从srcPos位置开始,移动 length 个元素 覆盖到 dest数组的destPos 位置开始的length个元素

当然,注意数组越界异常 :  java.lang.ArrayIndexOutOfBoundsException

srcPos 、destPos 越界,算越界

length 小于0 , 大于 src,dest 数组 的长度,算越界

srcPos + length,destPos + length 也算越界

打完,收工

Java 数组拷贝方法 System.arraycopy的更多相关文章

  1. jdk提供的数组扩容方法:System.arraycopy

    package chapter7; /* * jdk提供的扩容方法 * System.arraycopy */public class TestArrayjdk { public static voi ...

  2. Java数组拷贝的五种方法

    在Java中有多种方法可以拷贝一个数组,到另外一个数组. 1.循环拷贝 在循环拷贝方法中,只需要利用i,移动指针即可复制所有数组到arrayB中. for(int i=0;i<arrayA.le ...

  3. Java 数组的三种创建方法,数组拷贝方法

    public static void main(String[] args) {//创建数组的第一种方法int[] arr=new int[6];int intValue=arr[5];//Syste ...

  4. Java性能漫谈-数组复制之System.arraycopy

    当我还年幼的时候,我很任性,复制数组也是,写一个for循环,来回倒腾,后来长大了,就发现了System.arraycopy的好处. 为了测试俩者的区别我写了一个简单赋值int[100000]的程序来对 ...

  5. Java数组合并方法学习。

    参考博客: https://blog.csdn.net/liu_005/article/details/72760392 https://blog.csdn.net/jaycee110905/arti ...

  6. 数组的复制 --System.arraycopy()

    import java.util.Arrays; public class HellowWorld { public static void main(String[] argv ) { int[] ...

  7. Java—数组和方法

    数组 声明数组 数组类型[] 数组名;or 数据类型 数组名[]; 如:int[] scores; 分配空间 数组名 = new 数据类型[数组长度];如:scores = new int[5]; 以 ...

  8. JAVA 数组作为方法返回值—返回地址

    package Code411;/*一个方法可以有0,1,多个 参数,但只能有0和1个返回值希望一个方法产生多个结果数据进行返回 数组作为方法的参数,传递进去的是数组的地址值. */public cl ...

  9. JAVA 数组作为方法参数—传递地址

    package Code411;//数组作为方法参数—传递地址public class DodeArrayParam { public static void main(String[] args) ...

随机推荐

  1. nodejs中.npmrc文件的内容

    . nodejs安装后,使用npm安装模块的时候我出现了一个错误. getaddrinfo ENOTFOUND xxx 主要是这个配置文件的问题.搞不清楚.直接打开把文件内容删除变成 npmrc文件内 ...

  2. C++中的构造函数

    C++中的构造函数可以分为4类: (1)默认构造函数.以Student类为例,默认构造函数的原型为 Student()://没有参数 (2)初始化构造函数 Student(int num,int ag ...

  3. 游戏引擎架构,3d游戏引擎设计、Unreal引擎技术等五本PDF推荐

    扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop135452397.taobao.com/ 联系店主

  4. 100-days: Five

    Title: Feel better now ? The rise and rise of the anxiety economy(焦虑经济) rise and rise 一直上升 anxiety n ...

  5. bitcode?

    今天在网站上看到一篇关于第三方库不包含bitcode就会报错的文章,感觉剖析得很详细,分享出来,希望可以对iOS初入门者有所帮助.下面我们就一起来看看吧. 用Xcode 7 beta 3在真机(iOS ...

  6. day 23 网络编程

    C/S架构 Client与Server B/S架构 Browser与Server windows上查看端口占用情况 netstat -a OSI七层模型: 其他略...

  7. xml添加新节点

    #!/usr/bin/env python #coding:utf-8 # Author: xiaobaichuangtianxia--<> # Purpose: add jacoco d ...

  8. ubuntu14.04 安装系统/搜狗/QT/qq/wps/CAJviewer

    1.安装ubuntu系统     http://jingyan.baidu.com/album/4dc40848491fc5c8d946f1b1.html?picindex=1 官方网站:    ht ...

  9. vue学习视频网址(各种前端视频 网址)

    基础信息详解:https://segmentfault.com/blog/vueroad 网址:http://biaoyansu.com/18.1

  10. Oracle to_char函数的使用方法

    Oracle to_char函数的功能是将数值型或者日期型转化为字符型,下面就为您详细介绍Oracle to_char函数的使用,希望对您能有所帮助. Postgres 格式化函数提供一套有效的工具用 ...