Java使用System.arraycopy复制数组

原创 2016年05月31日 17:48:01

我们在项目中经常会复制一个数组元素到另一个数组里面,java复制数组的方法有很多,在这里介绍下JDK自带的System.arraycopy方法,这个方法使用想当简单快捷。

    /**
     * Copies an array from the specified source array, beginning at the
     * specified position, to the specified position of the destination array.
     * A subsequence of array components are copied from the source
     * array referenced by <code>src</code> to the destination array
     * referenced by <code>dest</code>. The number of components copied is
     * equal to the <code>length</code> argument. The components at
     * positions <code>srcPos</code> through
     * <code>srcPos+length-1</code> in the source array are copied into
     * positions <code>destPos</code> through
     * <code>destPos+length-1</code>, respectively, of the destination
     * array.
     * <p>
     * If the <code>src</code> and <code>dest</code> arguments refer to the
     * same array object, then the copying is performed as if the
     * components at positions <code>srcPos</code> through
     * <code>srcPos+length-1</code> were first copied to a temporary
     * array with <code>length</code> components and then the contents of
     * the temporary array were copied into positions
     * <code>destPos</code> through <code>destPos+length-1</code> of the
     * destination array.
     * <p>
     * If <code>dest</code> is <code>null</code>, then a
     * <code>NullPointerException</code> is thrown.
     * <p>
     * If <code>src</code> is <code>null</code>, then a
     * <code>NullPointerException</code> is thrown and the destination
     * array is not modified.
     * <p>
     * Otherwise, if any of the following is true, an
     * <code>ArrayStoreException</code> is thrown and the destination is
     * not modified:
     * <ul>
     * <li>The <code>src</code> argument refers to an object that is not an
     *     array.
     * <li>The <code>dest</code> argument refers to an object that is not an
     *     array.
     * <li>The <code>src</code> argument and <code>dest</code> argument refer
     *     to arrays whose component types are different primitive types.
     * <li>The <code>src</code> argument refers to an array with a primitive
     *    component type and the <code>dest</code> argument refers to an array
     *     with a reference component type.
     * <li>The <code>src</code> argument refers to an array with a reference
     *    component type and the <code>dest</code> argument refers to an array
     *     with a primitive component type.
     * </ul>
     * <p>
     * Otherwise, if any of the following is true, an
     * <code>IndexOutOfBoundsException</code> is
     * thrown and the destination is not modified:
     * <ul>
     * <li>The <code>srcPos</code> argument is negative.
     * <li>The <code>destPos</code> argument is negative.
     * <li>The <code>length</code> argument is negative.
     * <li><code>srcPos+length</code> is greater than
     *     <code>src.length</code>, the length of the source array.
     * <li><code>destPos+length</code> is greater than
     *     <code>dest.length</code>, the length of the destination array.
     * </ul>
     * <p>
     * Otherwise, if any actual component of the source array from
     * position <code>srcPos</code> through
     * <code>srcPos+length-1</code> cannot be converted to the component
     * type of the destination array by assignment conversion, an
     * <code>ArrayStoreException</code> is thrown. In this case, let
     * <b><i>k</i></b> be the smallest nonnegative integer less than
     * length such that <code>src[srcPos+</code><i>k</i><code>]</code>
     * cannot be converted to the component type of the destination
     * array; when the exception is thrown, source array components from
     * positions <code>srcPos</code> through
     * <code>srcPos+</code><i>k</i><code>-1</code>
     * will already have been copied to destination array positions
     * <code>destPos</code> through
     * <code>destPos+</code><i>k</I><code>-1</code> and no other
     * positions of the destination array will have been modified.
     * (Because of the restrictions already itemized, this
     * paragraph effectively applies only to the situation where both
     * arrays have component types that are reference types.)
     *
     * @param      src      the source array.
     * @param      srcPos   starting position in the source array.
     * @param      dest     the destination array.
     * @param      destPos  starting position in the destination data.
     * @param      length   the number of array elements to be copied.
     * @exception  IndexOutOfBoundsException  if copying would cause
     *               access of data outside array bounds.
     * @exception  ArrayStoreException  if an element in the <code>src</code>
     *               array could not be stored into the <code>dest</code> array
     *               because of a type mismatch.
     * @exception  NullPointerException if either <code>src</code> or
     *               <code>dest</code> is <code>null</code>.
     */
    public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);

这是System.class中对arraycopy方法的定义,可以看出来这个方法是native 方法,所以在这里看不到具体的实现,arraycopy接收5个参数,src是源数组(被复制的数组),srcPos是源数组复制的起始位置,dest是目标数组,destPos是目标数组存放的起始位置,length是复制的长度。因为是静态方法,所以直接通过System.arraycopy()就可以调用了。。。有兴趣的小伙伴可以去试试看。。

System.arraycopy()从指定源数组中复制一个数组

System类提供了一个arraycopy()方法public static void arraycopy(Object src, int s...
  • mynameishuangshuai
  • mynameishuangshuai
  • 2016年09月27日 18:44
  • 2971

利用System.arraycopy代替for循环实现数组复制

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...
  • tlk20071
  • tlk20071
  • 2017年07月20日 16:15
  • 262

System.arraycopy使用复制数组

int [] src=new int[]{1,2,3,4,5,6,7,8,9,10}; int [] dest=new int[6];               System.arraycopy(s...
  • u010015108
  • u010015108
  • 2017年04月10日 15:58
  • 153

Java之System.arraycopy方法的使用

不废话,直接看代码就全清楚了。里面 // 后面的是运行的结果 import java.util.Arrays; /** * 老紫竹JAVA提高教程 - System.arraycopy方法的使用。...
  • e421083458
  • e421083458
  • 2013年04月23日 13:00
  • 5775

关于System.arraycopy数组复制的一个问题

本小节主要讲的是数组复制的一个问题 在EClipse里面输入System.arraycopy会自动显示: System.arraycopy(src, srcPos, dest, destPos, le...
  • qq_30175203
  • qq_30175203
  • 2015年09月24日 17:11
  • 878

Java中System.arraycopy方法的使用

System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。其函数原型是: public static void arraycopy(Object src,int sr...
  • huangbaokang
  • huangbaokang
  • 2017年07月18日 11:07
  • 261

Java数组拷贝/复制的效率比较

今天在研究Jlibrtp代码时,偶然注意到里面大量使用了System.arraycopy()这个方法,心想既然是协议实现,那用的方法肯定都是效率最高或较高的了,以前对这个System.arraycop...
  • cncnlg
  • cncnlg
  • 2014年05月24日 22:39
  • 2576

java数组复制的效率

AVA语言的下面几种数组复制方法中,哪个效率最高? 正确答案: B   你的答案: D (错误) for循环逐一复制 System.arraycopy Sy...
  • Stand1210
  • Stand1210
  • 2016年09月09日 17:52
  • 1737

System.arraycopy方法的使用

import java.util.Arrays; /** * System.arraycopy方法的使用。 * * 从指定源数组中复制一个数组,复制从指定的位置开始, 到目标数组的指定位置结...
  • jaycee110905
  • jaycee110905
  • 2015年04月23日 22:07
  • 5857

JAVA中复制数组的方法

 在JAVA里面,可以用复制语句”A=B”给基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么引用同一数组的变量...
  • sinat_29384657
  • sinat_29384657
  • 2016年06月27日 15:48
  • 3693
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java使用System.arraycopy复制数组
举报原因:
原因补充:

(最多只允许输入30个字)