## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

No credit card required

# Resizing an Array

## Problem

The array filled up, and you got an `ArrayIndexOutOfBoundsException` .

## Solution

Make the array bigger.

## Discussion

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]

## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

No credit card required