code: public Object remove(Object key) {
          Entry tab[] = mTable;
          int hash = System.identityHashCode(key);
          int index = (hash & 0x7FFFFFFF) % tab.length;
              
          for (Entry e = tab[index], prev = null; e != null; e = e.mNext) {
              Object entryKey = e.getKey();
  
              if (entryKey == null) {
                  // Clean up after a cleared Reference.
                  mModCount++;
                  if (prev != null) {
                      prev.mNext = e.mNext;
                  }
                  else {
                      tab[index] = e.mNext;
                  }
                  mCount--;
              }
              else if (e.mHash == hash && key == entryKey) {
                  mModCount++;
                  if (prev != null) {
                      prev.mNext = e.mNext;
                  }
                  else {
                      tab[index] = e.mNext;
                  }
                  mCount--;
  
                  Object oldValue = e.mValue;
                  e.mValue = null;
                  return oldValue;
              }
              else {
                  prev = e;
              }
          }
  
          return null;
      }
docs: Removes the mapping for this key from this map if present.
  
  @param key key whose mapping is to be removed from the map.
  @return previous value associated with specified key, or <tt>null</tt>
  if there was no mapping for key.  A <tt>null</tt> return can
  also indicate that the map previously associated <tt>null</tt>
  with the specified key.