1

我正在尝试编写一个方法,该方法将接收一个数组并返回另一个相同类型的数组,大小加倍并具有相同的内容。但是,我需要一种将数组类型分配给直到运行时才知道的东西的方法。例子:

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 等来管理数组大小,但出于此目的,将事物保存在数组中会很棒。

4

3 回答 3

4

如果您使用Arrays.copyOf(T[] original, int newLength)的是 Java 1.6 或更高版本,则可以使用。

于 2013-01-31T17:32:33.353 回答
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(","));
于 2013-01-31T17:32:10.520 回答
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);
}

它的优点是不包含任何未经检查的泛型转换,因此不会产生任何警告。

于 2013-01-31T17:47:09.073 回答