guava/src/com/google/common/collect/ArrayTable.java
@CanIgnoreReturnValue
  public V set(int rowIndex, int columnIndex, @Nullable V value) {
    // In GWT array access never throws IndexOutOfBoundsException.
    checkElementIndex(rowIndex, rowList.size());
    checkElementIndex(columnIndex, columnList.size());
    V oldValue = array[rowIndex][columnIndex];
    array[rowIndex][columnIndex] = value;
    return oldValue;
  }
@CanIgnoreReturnValue
  public V set(int rowIndex, int columnIndex, @Nullable V value) {
    // In GWT array access never throws IndexOutOfBoundsException.
    checkElementIndex(rowIndex, rowList.size());
    checkElementIndex(columnIndex, columnList.size());
    V oldValue = array[rowIndex][columnIndex];
    array[rowIndex][columnIndex] = value;
    return oldValue;
  }
Associates {@code value} with the specified row and column indices. The logic {@code
put(rowKeyList().get(rowIndex), columnKeyList().get(columnIndex), value)} has the same
behavior, but this method runs more quickly.

@param rowIndex position of the row key in {@link #rowKeyList()}
@param columnIndex position of the row key in {@link #columnKeyList()}
@param value value to store in the table
@return the previous value with the specified row and column
@throws IndexOutOfBoundsException if either index is negative, {@code rowIndex} is greater than
or equal to the number of allowed row keys, or {@code columnIndex} is greater than or equal
to the number of allowed column keys