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. Centos 7 下 Mysql 5.7 Galera Cluster 集群部署

     一.介绍 传统架构的使用,一直被人们所诟病,因为MySQL的主从模式,天生的不能完全保证数据一致,很多大公司会花很大人力物力去解决这个问题,而效果却一般,可以说,只能是通过牺牲性能,来获得数据一致性 ...

  2. CentOS 下搭建SVN

    CentOS 7下搭建配置SVN服务器 1. 安装 CentOS通过yum安装subversion. $ sudo yum install subversion subversion安装在/bin目录 ...

  3. 缩点+染色+DFS codeforce467D

    题目链接:https://vjudge.net/contest/219056#problem/A 推荐博客:https://blog.csdn.net/ck_boss/article/details/ ...

  4. NYOJ-1058 DFS部分求和

    原题链接 本题思路:暴力深搜,具体见代码. #include <iostream> #include <stack> using namespace std; + ; int ...

  5. c++实现循环队列

    #include <iostream> #include<stdio.h> #include<stdlib.h> using namespace std; ;// ...

  6. swift 快速创建一些基本控件

    1.tableview private lazy var cellId = "cellId" fileprivate lazy var tv : UITableView = { l ...

  7. ios 错误纪录

    .self.出不来的原因 Member reference type 'struct objc_class *' is a pointer; maybe you meant to use '-> ...

  8. JAVA软件安装

    Java配置----JDK开发环境搭建及环境变量配置 文章来源:http://www.cnblogs.com/smyhvae/p/3788534.html Tomcat安装.配置和部署笔记 文章来源: ...

  9. C#—Dev XtraTabControl操作总结如动态增加Tab和关闭选项卡方法等

    1:显示行号 找到gridview属性 点击事件 CustomDrawRowIndicator private void gridView1_CustomDrawRowIndicator(object ...

  10. 4. 深入 Python 流程控制

    除了前面介绍的 while 语句,Python 还从其它语言借鉴了一些流程控制功能,并有所改变. 4.1. if 语句 也许最有名的是 if 语句.例如: >>> x = int(i ...