主题:[讨论]请教一个有点复杂的问题
在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方法中的注释,测试新的方法。
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方法中的注释,测试新的方法。