One approach is to allocate the array at a reasonable size to begin with, but if you find yourself with more data than will fit, reallocate a new, bigger array and copy the elements into it.[22] Here is code that does so:
import java.util.*; /** Re-allocate an array, bigger... */ public class Array2 { public static void main(String argv[]) { int nDates = 0; final int MAX = 10; Calendar dates[] = new Calendar[MAX]; Calendar c; while ((c=getDate( )) != null) { // if (nDates >= dates.length) { // System.err.println("Too Many Dates! Simplify your life!!"); // System.exit(1); // wimp out // } // better: reallocate, making data structure dynamic 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 // old array will be garbage collected soon... } dates[nDates++] = c; } System.out.println("Array size = " + dates.length); } static int n; /* Dummy method to return a sequence of 21 Calendar references, * so the array should be sized >= 21. */ public static Calendar getDate( ) { if (n++ > 21) return null; return Calendar.getInstance( ); } }
This technique will work reasonably well for simple linear collections of data. For data with a more variable structure, you will probably want to use a more dynamic approach, as in Section 7.4.
[22] You could copy it yourself using a
for
loop if you wish, but
System.arrayCopy( )
is likely to be faster because
it’s implemented in native code.
18.219.81.43