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`方法复制数组元素: ```java public class ArrayCopyExample { public static void main(String[] args) { int[] source = {1, 2, 3, 4, 5, 6}; int[] ...
`System.arraycopy` 和 `Arrays.copyOf` 都是Java中用于复制数组的方法,但它们在使用和处理异常情况上有所不同。这两个方法在处理数组复制时,提供了便利和效率,但各有其适用场景。 `System.arraycopy` 是一个...
使用System.arraycopy()实现数组之间的复制
该方法的实现原理是使用System.arraycopy()方法,例如: ```java public static <T> T[] addAll(final T[] array1, final T... array2) { // ... System.arraycopy(array1, 0, joinedArray, 0, array1.length); ...
我们可以使用 Integer.parseInt 方法将字符串转换成整型,然后使用方法一、方法二或方法三来实现数组合并。 代码实现: ```java public static int[] getIntArray(int[] a, String[] b) { int[] ia = new int[b....
这三种方法分别是:使用循环手动填充新数组、利用`List`集合进行合并再转换为数组以及直接使用`System.arraycopy()`方法。此外,还将涉及如何合并不同类型的数组,如字符数组与整型数组。 ### 方法一:使用循环合并...
本篇文章将介绍两种方法来合并两个数组,一种是使用Java内置的`System.arraycopy()`函数,另一种是不使用预定义函数,而是通过手动遍历来实现。 首先,让我们详细讨论使用`System.arraycopy()`的方法。这个方法是从...
数组元素的复制通常有两种方式:使用循环进行逐个元素的复制,以及使用Java提供的`System.arraycopy()`方法。 首先,我们来探讨一下使用循环复制数组元素的方法。例如,当我们有一个已经初始化的数组`a`,我们想要...
另一种方法是使用Java的`System.arraycopy()`函数,它可以高效地复制数组的一部分。在数组倒置的情况下,我们可以先创建一个临时数组,然后使用`arraycopy()`将原数组的后半部分复制到临时数组,再将原数组的前半...
需要注意的是,在 add(int index, E element) 方法中,我们使用 System.arraycopy 方法来复制数组元素,这是一个 native 方法,它的实现是基于 C++ 语言的。很多人认为 System.arraycopy 方法是调用底层的 memcpy ...
`System.arraycopy()`是Java提供的一个高效的方法,用于复制数组。相比使用循环逐个元素复制,`System.arraycopy()`在底层实现上更优化,能提供更好的性能。例如,如果你需要复制一个整型数组,避免使用for循环,...
3. **使用 `System.arraycopy()` 方法**: `System.arraycopy()` 是一个专门用于数组之间复制的高效方法。它接受五个参数:源数组、源数组的起始索引、目标数组、目标数组的起始索引以及要复制的元素数量。 ```...
数组倒置也可以使用Java的`System.arraycopy`方法来实现,这种方法更加简洁高效: ```java public class C { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; reverseArray(array); ...
总结来说,Java中合并两个`byte`数组可以通过创建新的数组并使用`System.arraycopy()`方法来实现。如果需要进一步处理合并后的数组,如反转或加密,可以分别使用自定义函数或Java内置的加密库。这些操作在处理二进制...
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 ...
在C#中,我们可以使用`Buffer.BlockCopy()`方法来拼接`byte`数组,其基本用法与Java的`System.arraycopy()`类似。而在C++中,我们可能需要使用`std::copy`函数结合`std::vector`来实现相同的功能。 除了基本的数组...
Java提供了System类的arraycopy()方法,它是进行数组复制的最直接和高效的方式。该方法接受五个参数:源数组、源数组起始位置、目标数组、目标数组起始位置和复制的元素数量。例如: ```java int[] srcArray = {1...