1

配列を取り、同じ型の別の配列を返すメソッドを作成しようとしています。サイズは 2 倍で、内容は同じです。ただし、実行時までわからないものに配列型を割り当てる方法が必要です。例:

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

Java1.6以降を使用している場合に使用できArrays.copyOf(T[] original, int newLength)ます。

于 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

ピーター・ローリーの答えの変形と同じように、参照型の配列を扱っていることがわかっている限り、これを行うことができます(のようないくつかのプリミティブな数値型とは対照的に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 に答える