在java中,数组不能动态调整其大小。调整数组大小的一种方法是使用java.util.ArrayList(或者java.util.Vetor)代替原有的数组;另一个解决方案就是建立一个新的数组并为其分配空间,然后把原来数组的内容拷贝到新数组中去, 见ResizeArray.java


public class ResizeArray {
    /**
     * 为一个新数组分配新空间,并将原来数组的内容拷贝到新数组中去
     * @param oldArray  the old array, to be reallocated. 原来的数组,将被重新分配空间
     * @param newSize   the new array size.新数组的大小
     * @return  A new array with the same contents. 存放原来数组内容的新数组
     */
    private static Object resizeArray (Object oldArray, int newSize) {
        int oldSize = java.lang.reflect.Array.getLength(oldArray);
        Class elementType = oldArray.getClass().getComponentType();
        Object newArray = java.lang.reflect.Array.newInstance(
                elementType,newSize);
        int preserveLength = Math.min(oldSize,newSize);
        if (preserveLength > 0)
            System.arraycopy (oldArray,0,newArray,0,preserveLength);
        return newArray; 
    }

    /**
     * 为一个二维数组分配新空间,并将原来数组的内容拷贝到新数组中去
     * @param oldArray  the old array, to be reallocated. 
     * @param newRowSize   row size of the new array 
     * @param newColumnSize  column size of the new array. 
     * @return    A new array     */
    private static Object resize2DArray (Object old2DArray,
            int newRowSize,
            int newColumnSize) {
        return null;   // replace the code
    }

    public static void main (String[] args) {
        int[] testArray = {1,2,3};
        testArray = (int[])resizeArray(testArray,5);
        testArray [3] = 4;
        testArray [4] = 5;
        for (int element : testArray)
            System.out.print (element + " "); 
        System.out.println("\n");
/*
        int test2DArray[][] = {{1,2,3},{4,5,6}};
        test2DArray = (int[][])resize2DArray(test2DArray,5,10);
        for (int[] row : test2DArray ) {
            for ( int element : row ) 
                System.out.print(element + " ");
            System.out.println();
        }
*/
    }
}



在ResizeArray.java中添加一个新方法,调整二维数组大小,该方法的声明如下:
private static Object resize2DArray (Object old2DArray, int newRowSize, int newColumnSize)
Java中的二维数组被看作是数组的数组。要给二维数组分配空间,第一维数组及其嵌套的数组都将要用到resizeArray函数。去掉main方法中的注释,测试新的方法。