code: @SuppressWarnings("unchecked")
      public <T> T[] toArray(T[] a) {
          if (a == null) throw new NullPointerException();
          return (T[]) toArrayInternal(a);
      }
docs: Returns an array containing all of the elements in this deque,
  in proper sequence (from first to last element); the runtime
  type of the returned array is that of the specified array.  If
  the deque 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 deque.
  
  <p>If this deque fits in the specified array with room to spare
  (i.e., the array has more elements than this deque), the element in
  the array immediately following the end of the deque is set to
  {@code null}.
  
  <p>Like the {@link #toArray()} method, this method acts as
  bridge between array-based and collection-based APIs.  Further,
  this method allows precise control over the runtime type of the
  output array, and may, under certain circumstances, be used to
  save allocation costs.
  
  <p>Suppose {@code x} is a deque known to contain only strings.
  The following code can be used to dump the deque into a newly
  allocated array of {@code String}:
  
  <pre> {@code String[] y = x.toArray(new String[0]);}</pre>
  
  Note that {@code toArray(new Object[0])} is identical in function to
  {@code toArray()}.
  
  @param a the array into which the elements of the deque 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 all of the elements in this deque
  @throws ArrayStoreException if the runtime type of the specified array
  is not a supertype of the runtime type of every element in
  this deque
  @throws NullPointerException if the specified array is null