guava/src/com/google/common/collect/ArrayTable.java
public static <R, C, V> ArrayTable<R, C, V> create(Table<R, C, V> table) {
    return (table instanceof ArrayTable<?, ?, ?>)
        ? new ArrayTable<R, C, V>((ArrayTable<R, C, V>) table)
        : new ArrayTable<R, C, V>(table);
  }
public static <R, C, V> ArrayTable<R, C, V> create(Table<R, C, V> table) {
    return (table instanceof ArrayTable<?, ?, ?>)
        ? new ArrayTable<R, C, V>((ArrayTable<R, C, V>) table)
        : new ArrayTable<R, C, V>(table);
  }
Creates an {@code ArrayTable} with the mappings in the provided table.

<p>If {@code table} includes a mapping with row key {@code r} and a separate mapping with
column key {@code c}, the returned table contains a mapping with row key {@code r} and column
key {@code c}. If that row key / column key pair in not in {@code table}, the pair maps to
{@code null} in the generated table.

<p>The returned table allows subsequent {@code put} calls with the row keys in {@code
table.rowKeySet()} and the column keys in {@code table.columnKeySet()}. Calling {@link #put}
with other keys leads to an {@code IllegalArgumentException}.

<p>The ordering of {@code table.rowKeySet()} and {@code table.columnKeySet()} determines the
row and column iteration ordering of the returned table.

@throws NullPointerException if {@code table} has a null key