我正在尝试编写一个方法,该方法将接收一个数组并返回另一个相同类型的数组,大小加倍并具有相同的内容。但是我需要一种方法将数组类型分配给在运行时才能知道的东西。例如:
public object[] doubleArray(object[] array) {
---[] arrayCopy = new ---[array.length*2];
//copy content
for (int i = 0; i < array.length; i++) {
arrayCopy[i] = array[i];
}
return arrayCopy;
}
传入的数组在运行时才会知道。 非常感谢任何帮助
PS我意识到可以使用ArrayLists等来管理数组大小,但出于这个目的,将数据保存到数组会很棒。
答案 0 :(得分:4)
如果您使用的是Java 1.6或更高版本,则可以使用Arrays.copyOf(T[] original, int newLength)
。
答案 1 :(得分:3)
您可以为通用数组做些什么
public static <A> A doubleArray(A array) {
int length = Array.getLength(array);
Class<?> componentType = array.getClass().getComponentType();
A copy = (A) Array.newInstance(componentType, length * 2);
System.arraycopy(array, 0, copy, 0, length);
return copy;
}
注意:这适用于包括基本数组的所有数组。
int[] ints = doubleArray(new int[4]);
String[] strings = doubleArray("a,b,c,d,e,f".split(","));
答案 2 :(得分:0)
正如Peter Lawrey的回答一样,你可以这样做,只要你知道你正在处理一些引用类型的数组(而不是像某些原始数字类型那样) byte[]
):
public static Object[] doubleArray(Object[] array) {
Object[] ret = (Object[])Array.newInstance(src.getClass().getComponentType(), src.length * 2);
System.arraycopy(src, 0, ret, 0, src.length);
return(ret);
}
它的优点是不包含任何未经检查的通用转换,因此它不会生成任何警告。