使用System.arraycopy()实现数组之间的复制
来源:互联网 发布:json如何取数组 编辑:程序博客网 时间:2024/06/11 13:47
System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。
其函数原型是: public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src:源数组; srcPos:源数组要复制的起始位置; dest:目的数组; destPos:目的数组放置的起始位置; length:复制的长度。
<span style="font-size:18px;">/** * 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);</span>
注意:src and dest都必须是同类型或者可以进行转换类型的数组. 有趣的是这个函数可以实现自己到自己复制。
比如: int[] fun ={0,1,2,3,4,5,6}; System.arraycopy(fun,0,fun,3,3); 则结果为:{0,1,2,0,1,2,6}。
实现过程是这样的,先生成一个长度为length的临时数组,将fun数组中srcPos 到srcPos+length-1之间的数据拷贝到临时数组中,再执行System.arraycopy(临时数组,0,fun,3,3).
转载地址:http://blog.163.com/malloc_wet/blog/static/1104560862011921115853610/
0 0
- System.arraycopy()实现数组之间的复制
- System.arraycopy()实现数组之间的复制
- System.arraycopy()实现数组之间的复制
- System.arraycopy()实现数组之间的复制
- System.arraycopy实现数组之间的复制
- 使用System.arraycopy()实现数组之间的复制
- 使用System.arraycopy()实现数组之间的复制(转)
- 使用System.arraycopy()实现数组之间的复制
- 【转】使用System.arraycopy()实现数组之间的复制
- 使用System.arraycopy()实现数组之间的复制
- 使用System.arraycopy()实现数组之间的复制
- 使用System.arraycopy()实现数组之间的复制
- 使用System.arraycopy()实现数组之间的复制
- 使用System.arraycopy()实现数组之间的复制
- 使用System.arraycopy()实现数组之间的复制
- 使用System.arraycopy()实现数组之间的复制
- 使用System.arraycopy()实现数组之间的复制
- 使用System.arraycopy()实现数组之间的复制
- mysql 拼接字符串方法
- 幸福的味道
- wordpress feed增加自定义字段
- rtorrent 使用的方法
- js 比较日期大小
- 使用System.arraycopy()实现数组之间的复制
- IE11打开的网站,视频不见了。部分win7+win8电脑出现此问题
- Tomcat 对异步servlet的处理
- Device Tree(二):基本概念
- mvc的原理--android面试题之(一)
- 黑马程序员--Java基础语法---数组
- PUTTY在Linux下的安装
- ireport加载JavaBean无响应,创建JavaBean数据源无响应。
- servlet3.0规范异步请求