code: public V remove(K key)
    {
      Object okey = key;
      if (okey == null)
        okey = NULL;
  
      int hash = (okey.hashCode() & 0x7fffffff) % _prime;
  
      Object lock = getLock(hash);
  
      V value = null;
  
      synchronized (lock) {
        CacheItem<K,V> prevItem = null;
  
        for (CacheItem<K,V> item = _entries[hash];
             item != null;
             item = item._nextHash) {
          if (item._key == okey || item._key.equals(okey)) {
            removeLruItem(item);
  
            CacheItem<K,V> nextHash = item._nextHash;
  
            if (prevItem != null)
              prevItem._nextHash = nextHash;
            else {
              assert(_entries[hash] == item);
  
              _entries[hash] = nextHash;
            }
  
            value = item._value;
            break;
          }
  
          prevItem = item;
        }
  
        if (_isEnableListeners && value instanceof SyncCacheListener)
          ((SyncCacheListener) value).syncRemoveEvent();
      }
  
      if (_isEnableListeners && value instanceof CacheListener)
        ((CacheListener) value).removeEvent();
  
      return value;
    }
docs: Removes an item from the cache
  
  @param key the key to remove
  
  @return the value removed