An object of class DynamicArrayOfInt acts like an array with unlimited size. In the constructor, initially the data array has a size of 1 and grows as necessary.

The method put(position, value); is used to store the value at the specified position in the array. There is no pre-set limit on how large position can be, although for very large values there would be problems with having enough computer memory. The function get(position); is used to retrieve the value stored in the specified position. If no value has ever been put at that position, then the value is zero.


public class DynamicArrayOfInt {

   private int[] data;  // An array to hold the data.  The actual size
                        //    of the array will increase as necessary.

   public DynamicArrayOfInt() {
          // Constructor.   Create a new DynamicArrayOfInt object.
          // Initally, the data array only has size 1, but it will
          // grow as necessary.
      data = new int[1];

   public int get(int position) {
         // Get the value from the specified position in the array.
         // Since all array positions are initially zero, when the
         // specified position lies outside the actual physical size
         // of the data array, a value of 0 is returned.  However, the
         // array does NOT grow to include the specified position.
      if (position >= data.length)
         return 0;
         return data[position];

   public void put(int position, int value) {
         // Store the value in the specified position in the array.
         // The data array will increase in size to include this
         // position, if necessary.
      if (position >= data.length) {
             // The specified position is outside the actual size of
             // the data array.  Double the size, or if that still does
             // not include the specified position, set the new size
             // to 2*position.  A new, larger array is created and
             // all the data from the old array is copied into it.
             // Then the instance variable, data, is set to refer
             // to the newly created array.
         int newSize = 2 * data.length;
         if (position >= newSize)
            newSize = 2 * position;
         int[] newData = new int[newSize];
         System.arraycopy(data, 0, newData, 0, data.length);
         data = newData;
             // The following line is here for demonstration purposes only.
         System.out.println("Size of dynamic array increased to " + newSize);
      data[position] = value;

} // end class DynamicArrayOfInt