code: @Override
    public V remove(Object o) {
      checkMutable();
      @SuppressWarnings("unchecked")
      final K key = (K) o;
      final int index = binarySearchInArray(key);
      if (index >= 0) {
        return removeArrayEntryAt(index);
      }
      // overflowEntries might be Collections.unmodifiableMap(), so only
      // call remove() if it is non-empty.
      if (overflowEntries.isEmpty()) {
        return null;
      } else {
        return overflowEntries.remove(key);
      }
    }
docs: The implementation throws a {@code ClassCastException} if o is not an
  object of type {@code K}.
  
  {@inheritDoc}