在Java中,數(shù)組不能動(dòng)態(tài)重設(shè)大小。一個(gè)可替代方法是使用java.util.ArrayList (或者java.util.Vector)代替使用原始數(shù)組(array)。另一種解決方案是用一個(gè)不同大小的數(shù)組重設(shè)數(shù)組,將舊數(shù)組內(nèi)容拷貝到新的數(shù)組。下面做了個(gè)演示程序?qū)崿F(xiàn)第二種方案,編寫了個(gè)通用函數(shù)rsizeArray (參數(shù))來實(shí)現(xiàn)此功能:
凡是有該標(biāo)志的文章,都是該blog博主Caoer(草兒)原創(chuàng),凡是索引、收藏
、轉(zhuǎn)載請(qǐng)注明來處和原文作者。非常感謝。
/**
* 使用一個(gè)新大小重設(shè)數(shù)組,并拷貝舊數(shù)組的內(nèi)容到新數(shù)組
* @param oldArray 舊數(shù)組被重設(shè)
* @param newSize 新數(shù)組大小
* @return 返回帶同樣內(nèi)容的新數(shù)組
*/
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;
}
// resizeArray()測(cè)試用例
public static void main (String[] args) {
int[] a = {1,2,3};
a = (int[])resizeArray(a,5);
a[3] = 4;
a[4] = 5;
for (int i=0; i<a.length; i++)
System.out.println (a[i]); }
那二維數(shù)組如何重設(shè)大小呢? 很簡(jiǎn)單,就是處理數(shù)組的數(shù)組呀!
要想重設(shè)二維數(shù)組,resizeArray方法必須處理外部數(shù)組和所有嵌套數(shù)組,如下例:
int a[][] = new int[2][3];
//...
a = (int[][])resizeArray(a,20);
// 新數(shù)組是[20][3]
for (int i=0; i<a.length; i++) {
if (a[i] == null)
a[i] = new int[30];
else a[i] = (int[])resizeArray(a[i],30);
}
// 新數(shù)組是[20][30]
凡是有該標(biāo)志的文章,都是該blog博主Caoer(草兒)原創(chuàng),凡是索引、收藏
、轉(zhuǎn)載請(qǐng)注明來處和原文作者。非常感謝。