在Java中复制非初始类型数组的首选方法是什么?性能问题如何?Java:复制非原始类型数组
8
A
回答
7
老学校的方式是:
public static void java.lang.System.arraycopy(Object src, int srcPos,
Object dest, int destPos, int length)
这从一个现有的阵列到另一个copys。您必须自己分配新阵列...假设您正在制作副本阵列。
从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给予特殊处理。
+0
谁想知道'int [] array = {1,2,3}; int [] copy = Arrays.copyOf(array,array.length,Integer.class);'不会编译(_“类型数组中的方法copyOf(int [],int)不适用于参数int [],int,类
14
System.arraycopy
(它给你经由offset
和length
参数复制的阵列的任意部分的能力)。或者是在JDK 6加入,是一个通用的方法,因此可以被用来
java.util.Arrays.copyOf
:
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. 非可复制类型的数组
- 2. 将锯齿状的n维原始数组复制到java中的新类型
- 3. 如何在Java中复制原始类型的内存?
- 4. Java在非原始数据类型中输入值
- 5. Excel - 恢复原始数据类型
- 6. 复制数组然后删除原始
- 7. 在C++中初始化非原始类静态数据类型
- 8. Java - 引用原始数据类型?
- 9. 参数化Java中的原始类型
- 10. typedef - 原始类型到原始类型
- 11. Rails ActiveRecord和原始类型数组
- 12. 定制铸造原始数据类型
- 13. Java类复制和数组
- 14. Java泛型 - 原始类型和参数化类型转换
- 15. StructureMap非原始类型列表
- 16. C++传递值与非原始类型?
- 17. 图表绑定到非原始类型
- 18. 事件中的非原始类型
- 19. 原始类型和泛型 - Java的
- 20. Java泛型和原始类型
- 21. Java的泛型和原始类型
- 22. Java如何处理原始类型数组?
- 23. 在Java中,可以将非原始类型视为常量吗?
- 24. SSE数据类型和原始类型
- 25. 除去非原始型
- 26. JavaScript中的原始数据类型与非原始数据类型之间的区别
- 27. 作为函数参数的非原始类的PHP数组
- 28. 复制并更新数组值更新原始数组值javascript
- 29. 获取原始,复杂,ArrayEnumerable类型
- 30. 原始数据类型在java中是原子的
您是否只想复制数组本身(即数组中的引用),还是还想克隆数组中引用指向的所有对象? – Jesper 2009-09-02 07:47:03