code: @SuppressWarnings("unchecked")
      public synchronized <T> T[] toArray(T[] a) {
          if (a.length < elementCount)
              return (T[]) Arrays.copyOf(elementData, elementCount, a.getClass());
  
          System.arraycopy(elementData, 0, a, 0, elementCount);
  
          if (a.length > elementCount)
              a[elementCount] = null;
  
          return a;
      }
docs: Returns an array containing all of the elements in this Vector in the
  correct order; the runtime type of the returned array is that of the
  specified array.  If the Vector 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 Vector.
  
  <p>If the Vector fits in the specified array with room to spare
  (i.e., the array has more elements than the Vector),
  the element in the array immediately following the end of the
  Vector is set to null.  (This is useful in determining the length
  of the Vector <em>only</em> if the caller knows that the Vector
  does not contain any null elements.)
  
  @param a the array into which the elements of the Vector 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 Vector
  @throws ArrayStoreException if the runtime type of a is not a supertype
  of the runtime type of every element in this Vector
  @throws NullPointerException if the given array is null
  @since 1.2