from cookbook 的一个例子
包含了他的一个com-darwinsys-util.jar,去他的网站看看
他的思想是重新定义一个更大的数组,并将前一个数组的元素拷贝到新数组里去。
import java.util.*;
public class Array2{
public static void main(String[] argv) {
int nDates = 0;
final int MAX = 10;
Calendar dates[] = new Calendar[MAX];
Calendar c;
StructureDemo source = new StructureDemo(21);
while ((c=(Calendar)source.getDate()) != null) { // 重新定义数组
                     if (nDates >= dates.length) {
Calendar tmp[] = new Calendar[dates.length + 10];
System.arraycopy(dates, 0, tmp, 0, dates.length);
dates = tmp;    // copies the array reference
   }
dates[nDates++] = c;
}
System.out.println("Array size = " + dates.length);
}
}

解决方案 »

  1.   

    参考vector,arraylist,StringBuffer的实现。
    应该先生成一个数组,在容量不够的情况下,
    重新分配个新数组,然后把原来的拷贝到新数组。
    此处就有一个策略问题,
    可以在每次分配的时候,数组增加固定大小,
    也可以按原来的一个比例来扩大,比如StringBuffer
    就是按原来的2倍大小来扩充的。
      

  2.   

    String[] aa = {"1", "3"};
    string[] bb = new String[3];
    System.arraycopy(aa, 0, bb, 0, aa.lenth);
    bb[3] = "3";