Java:复制非基本类型的数组

时间:2009-09-02 07:39:18

标签: java arrays copy

在Java中复制非基本类型数组的首选方法是什么?性能问题怎么样?

2 个答案:

答案 0 :(得分:14)

System.arraycopy

(这使您能够通过offsetlength参数复制数组的任意部分。或

java.util.Arrays.copyOf

这是在JDK 6中添加的,并且是一种通用方法,因此可以使用它:

Integer[] is = new Integer[] { 4, 6 }
Integer[] copy = Arrays.copyOf(is, is.length);

或者它可以缩小类型:

Number[] is = new Number[]{4, 5};
Integer[] copy = Arrays.copyOf(is, is.length, Integer[].class);

请注意,您还可以在数组中使用 clone方法

Number[] other = is.clone();

答案 1 :(得分:7)

旧学校的方式是:

public static void java.lang.System.arraycopy(Object src, int srcPos, 
         Object dest, int destPos, int length)

这从一个现有阵列复制到另一个阵列。您必须自己分配新数组...假设您正在制作一个副本数组。

从JDK 6开始,java.util.Arrays类有许多copyOf方法用于制作具有新大小的数组副本。相关的是:

public static <T> T[] copyOf(T[] original, int newLength)

public static <T,U> T[] copyOf(U[] original, int newLength,
         Class<? extends T[]> newType)

第一个使用原始数组类型进行复制,第二个使用不同的数组类型进行复制。

请注意,arraycopy和3参数copyOf都必须根据目标数组类型检查原始(源)数组中每个元素的类型。所以两者都可以抛出类型异常。 2参数copyOf(理论上至少)不需要进行任何类型检查,因此应该(理论上)更快。在实践中,相对性能将取决于实现。例如,arraycopy通常由JVM进行特殊处理。