code: @SuppressWarnings({"unchecked"})
  	@Override
  	public <T> T[] toArray(T[] a) {
  		if (a.length < size)
  			a = (T[])java.lang.reflect.Array.
  				newInstance(a.getClass().getComponentType(), size);
  		System.arraycopy(elementData, 0, a, 0, size);
  		if (a.length > size)
  			a[size] = null;
  		return a;
  	}
docs: Returns an array containing all of the elements in this list in the
  correct order; the runtime type of the returned array is that of the
  specified array.  If the list fits in the specified array, it is
  returned therein.  Otherwise, a new array is allocated with the runtime
  type of the specified array and the size of this list.<p>
  
  If the list fits in the specified array with room to spare (i.e., the
  array has more elements than the list), the element in the array
  immediately following the end of the collection is set to
  <tt>null</tt>.  This is useful in determining the length of the list
  <i>only</i> if the caller knows that the list does not contain any
  <tt>null</tt> elements.
  
  @param a the array into which the elements of the list are to
  be stored, if it is big enough; otherwise, a new array of the
  same runtime type is allocated for this purpose.
  @return an array containing the elements of the list.
  @throws ArrayStoreException if the runtime type of a is not a supertype
  of the runtime type of every element in this list.