code: public void remove(K key) {
      // Set the entry so that it will be removed from the backing store when it is encountered by
      // the eviction thread.
      mMap.compute(key, (k, entry) -> {
        onRemove(key);
        if (entry == null && cacheIsFull()) {
          removeFromBackingStore(k);
          return null;
        }
        onCacheUpdate(key, null);
        if (entry == null) {
          entry = new Entry(key, null);
        } else {
          entry.mValue = null;
        }
        entry.mReferenced = false;
        entry.mDirty = true;
        return entry;
      });
      wakeEvictionThreadIfNecessary();
    }
docs: Removes a key from the cache.
  
  The key is not immediately removed from the backing store. Instead, we set the entry's value to
  null to indicate to the eviction thread that to evict the entry, it must first remove the key
  from the backing store. However, if the cache is full we must synchronously write to the
  backing store instead.
  
  @param key the key to remove