您的位置:首页 > 其它

如何扩大二维数组的大小(任何类型的通用版)

2012-10-21 15:10 281 查看
下面给大家介绍一种人为扩大二维数组大小的一种方法。

第一个函数是扩大一维数组的,第二个是扩大二维数组的:

import java.lang.reflect.Array;

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 =Array.getLength(oldArray);
Class elementType = oldArray.getClass().getComponentType();
Object newArray = 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 Object resize2DArray(Object oldArray, int newRowSize,
int newColumnSize) {
Object[][] old2DArray = (Object[][]) oldArray;
Object[][] new2DArray = (Object[][]) java.lang.reflect.Array
.newInstance(old2DArray.getClass().getComponentType(),
newRowSize);
String className = new2DArray.getClass().getName();
className = className.substring(className.indexOf("[L")+2, className
.length() - 1);
Class elementType = null;
try {
elementType = Class.forName(className);
} catch (ClassNotFoundException e) {
// 打开注释部分兼容性更强 适合复杂情况的非基础数据类型的加载
//            try {
//                elementType = Class.forName(className, false, Thread.currentThread()
//                        .getContextClassLoader());
//            } catch (ClassNotFoundException e1) {
//                try {
//                    elementType = Class.forName(className, false, ResizeArray.class
//                            .getClassLoader());
//                } catch (ClassNotFoundException e2) {
//                    e2.printStackTrace();
//                }
//            }
e.printStackTrace();
}
for (int i = 0; i < Math.max(old2DArray.length, new2DArray.length); i++) {
new2DArray[i] = (Object[]) java.lang.reflect.Array.newInstance(
elementType, newColumnSize);
/*System.arraycopy(old2DArray[i], 0, new2DArray[i], 0, Math.min(
old2DArray[i].length, newColumnSize));*/
}
return new2DArray;

}

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");

Integer test2DArray[][] = {{1,2,3},{4,5,6}};
test2DArray = (Integer[][])new ResizeArray().resize2DArray(test2DArray, 5, 10);
int i,j;
for (i = 0; i < test2DArray.length; i++) {
for (j = 0; test2DArray[i] != null && j < test2DArray[i].length; j++) {
test2DArray[i][j]  = i*j;
}
}
for (i = 0; i < test2DArray.length; i++) {
for (j = 0; test2DArray[i] != null && j < test2DArray[i].length; j++) {
System.out.print(test2DArray[i][j] + "\t");
}
System.out.println();
}

}
}


运算结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: