code: private void replaceValueInEntry(int entry, @NullableDecl V newValue, boolean force) {
      checkArgument(entry != ABSENT);
      int newValueHash = Hashing.smearedHash(newValue);
      int newValueIndex = findEntryByValue(newValue, newValueHash);
      if (newValueIndex != ABSENT) {
        if (force) {
          removeEntryValueHashKnown(newValueIndex, newValueHash);
          if (entry == size) { // this entry got moved to newValueIndex
            entry = newValueIndex;
          }
        } else {
          throw new IllegalArgumentException("Value already present in map: " + newValue);
        }
      }
      // we do *not* update insertion order, and it isn't a structural modification!
      deleteFromTableVToK(entry, Hashing.smearedHash(values[entry]));
      values[entry] = newValue;
      insertIntoTableVToK(entry, newValueHash);
    }
docs: Updates the specified entry to point to the new value: removes the old value from the V-to-K
  mapping and puts the new one in. The entry does not move in the insertion order of the bimap.