`

System.arraycopy方法的使用

    博客分类:
  • Java
阅读更多
package com.jiaozg.test;

import java.util.Arrays;

public class SystemArraycopyTest {
	/**
	    * 从指定源数组中复制一个数组,复制从指定的位置开始,

	    *到目标数组的指定位置结束

	    */
	public static void main(String [] args) {
		// 此方位为native方法。
	    // public static native void arraycopy(
	    // Object src, int srcPos, Object dest, int destPos, int length);
		int[] ids = { 1, 2, 3, 4, 5 }; 
		System.out.println(Arrays.toString(ids)); // [1, 2, 3, 4, 5]
		
		//测试自我复制
	    //把从索引0开始的2个数字复制到索引为3的位置上
	    System.arraycopy(ids, 0, ids, 3, 2);
	    System.out.println(Arrays.toString(ids)); // [1, 2, 3, 1, 2]
		
	    //测试复制到别的数组上
	    //将数据的索引1开始的3个数据复制到目标的索引为0的位置上

	    int[] ids2 = new int[6];

	    System.arraycopy(ids, 1, ids2, 0, 3); 
	    System.out.println(Arrays.toString(ids2)); // [2, 3, 1, 0, 0, 0]
	    
	    //此功能要求
	    //源的起始位置+长度不能超过末尾
	    //目标起始位置+长度不能超过末尾
	    //且所有的参数不能为负数
	    try {
	        System.arraycopy(ids, 0, ids2, 0, ids.length + 1);
	        } catch (IndexOutOfBoundsException ex) {
	        // 发生越界异常,数据不会改变System.out.println("拷贝发生异常:数据越界。");
	    }
	    System.out.println(Arrays.toString(ids2)); // [2, 3, 1, 0, 0, 0]
	    
	    //如果是类型转换问题
	    Object[] o1 = { 1, 2, 3, 4.5, 6.7 };
	    Integer[] o2 = new Integer[5];
	    System.out.println(Arrays.toString(o2)); // [null, null, null, null, null]
	    
	    try {
	        System.arraycopy(o1, 0, o2, 0, o1.length);
	    } catch (ArrayStoreException ex) {
	        // 发生存储转换,部分成功的数据会被复制过去
	        System.out.println("拷贝发生异常:数据转换错误,无法存储。");
	    }
	    
	    // 从结果看,前面3个可以复制的数据已经被存储了。剩下的则没有
	    System.out.println(Arrays.toString(o2)); // [1, 2, 3, null, null]
	    
	}

}
分享到:
评论

相关推荐

    System.arraycopy实现数组之间的复制

    下面是一个简单的示例,演示如何使用`System.arraycopy`方法复制数组元素: ```java public class ArrayCopyExample { public static void main(String[] args) { int[] source = {1, 2, 3, 4, 5, 6}; int[] ...

    System.arraycopy和Arrays.copyOf

    `System.arraycopy` 和 `Arrays.copyOf` 都是Java中用于复制数组的方法,但它们在使用和处理异常情况上有所不同。这两个方法在处理数组复制时,提供了便利和效率,但各有其适用场景。 `System.arraycopy` 是一个...

    使用System.arraycopy()实现数组之间的复制

    使用System.arraycopy()实现数组之间的复制

    详解Java合并数组的两种实现方式

    该方法的实现原理是使用System.arraycopy()方法,例如: ```java public static <T> T[] addAll(final T[] array1, final T... array2) { // ... System.arraycopy(array1, 0, joinedArray, 0, array1.length); ...

    「java三种字符数组合并的方法」.docx

    我们可以使用 Integer.parseInt 方法将字符串转换成整型,然后使用方法一、方法二或方法三来实现数组合并。 代码实现: ```java public static int[] getIntArray(int[] a, String[] b) { int[] ia = new int[b....

    java三种字符数组合并的方法.doc

    这三种方法分别是:使用循环手动填充新数组、利用`List`集合进行合并再转换为数组以及直接使用`System.arraycopy()`方法。此外,还将涉及如何合并不同类型的数组,如字符数组与整型数组。 ### 方法一:使用循环合并...

    合并两个数组的Java程序.docx

    本篇文章将介绍两种方法来合并两个数组,一种是使用Java内置的`System.arraycopy()`函数,另一种是不使用预定义函数,而是通过手动遍历来实现。 首先,让我们详细讨论使用`System.arraycopy()`的方法。这个方法是从...

    2022年计算机二级考试java章节辅导数组元素的复制.docx

    数组元素的复制通常有两种方式:使用循环进行逐个元素的复制,以及使用Java提供的`System.arraycopy()`方法。 首先,我们来探讨一下使用循环复制数组元素的方法。例如,当我们有一个已经初始化的数组`a`,我们想要...

    Java数组倒置源代码

    另一种方法是使用Java的`System.arraycopy()`函数,它可以高效地复制数组的一部分。在数组倒置的情况下,我们可以先创建一个临时数组,然后使用`arraycopy()`将原数组的后半部分复制到临时数组,再将原数组的前半...

    Java ArrayList.add 的实现方法

    需要注意的是,在 add(int index, E element) 方法中,我们使用 System.arraycopy 方法来复制数组元素,这是一个 native 方法,它的实现是基于 C++ 语言的。很多人认为 System.arraycopy 方法是调用底层的 memcpy ...

    Java程序优化大全[参照].pdf

    `System.arraycopy()`是Java提供的一个高效的方法,用于复制数组。相比使用循环逐个元素复制,`System.arraycopy()`在底层实现上更优化,能提供更好的性能。例如,如果你需要复制一个整型数组,避免使用for循环,...

    Java程序将一个数组的所有元素复制到另一个数组.docx

    3. **使用 `System.arraycopy()` 方法**: `System.arraycopy()` 是一个专门用于数组之间复制的高效方法。它接受五个参数:源数组、源数组的起始索引、目标数组、目标数组的起始索引以及要复制的元素数量。 ```...

    Java数组倒置.zip

    数组倒置也可以使用Java的`System.arraycopy`方法来实现,这种方法更加简洁高效: ```java public class C { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; reverseArray(array); ...

    java中两个byte数组实现合并的示例

    总结来说,Java中合并两个`byte`数组可以通过创建新的数组并使用`System.arraycopy()`方法来实现。如果需要进一步处理合并后的数组,如反转或加密,可以分别使用自定义函数或Java内置的加密库。这些操作在处理二进制...

    IO流的使用,自己的心得

    System.arraycopy(writeStringToBytes, i*tempLength, temp, 0, writeStringToBytes.length%tempLength); ops.write(new String(temp,"GBK").trim().getBytes(),0,writeStringToBytes.length%tempLength);...

    数组 简单 插入 删除 复制 操作

    例如,`ArrayCopy.java`文件可能有以下代码: ```java public class ArrayCopy { public static void main(String[] args) { int[] original = {1, 2, 3, 4, 5}; int[] copy = new int[original.length]; // ...

    一道面试题的代码:数组合并和排序

    在Java中,可以使用`System.arraycopy()`方法或创建一个新的数组并遍历两个原始数组来完成此操作。假设我们有两个整型数组`int[] array1`和`int[] array2`,我们可以这样做: ```java int[] combinedArray = new ...

    拼接byte数组

    在C#中,我们可以使用`Buffer.BlockCopy()`方法来拼接`byte`数组,其基本用法与Java的`System.arraycopy()`类似。而在C++中,我们可能需要使用`std::copy`函数结合`std::vector`来实现相同的功能。 除了基本的数组...

    java高端技术课程--Java数组如何实现复制

    Java提供了System类的arraycopy()方法,它是进行数组复制的最直接和高效的方式。该方法接受五个参数:源数组、源数组起始位置、目标数组、目标数组起始位置和复制的元素数量。例如: ```java int[] srcArray = {1...

Global site tag (gtag.js) - Google Analytics