code: @SuppressWarnings("unchecked")
  	public <T> T[] toArray(T[] a) {
  		if (a.length < size)
  			// Make a new array of a's runtime type, but my contents:
  			return (T[]) Arrays.copyOf(elementData, size, a.getClass());
  		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 proper
  sequence (from first to last element); 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 null 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 the specified array is not a supertype
  of the runtime type of every element in this list
  @throws NullPointerException
  if the specified array is null