code: @GwtIncompatible // reflection
    public V[][] toArray(Class<V> valueClass) {
      @SuppressWarnings("unchecked") // TODO: safe?
      V[][] copy = (V[][]) Array.newInstance(valueClass, rowList.size(), columnList.size());
      for (int i = 0; i < rowList.size(); i++) {
        System.arraycopy(array[i], 0, copy[i], 0, array[i].length);
      }
      return copy;
    }
docs: Returns a two-dimensional array with the table contents. The row and column indices correspond
  to the positions of the row and column in the iterables provided during table construction. If
  the table lacks a mapping for a given row and column, the corresponding array element is null.
  
  <p>Subsequent table changes will not modify the array, and vice versa.
  
  @param valueClass class of values stored in the returned array