code: public V remove(@NonNull K key) {
          Entry<K, V> toRemove = get(key);
          if (toRemove == null) {
              return null;
          }
          mSize--;
          if (!mIterators.isEmpty()) {
              for (SupportRemove<K, V> iter : mIterators.keySet()) {
                  iter.supportRemove(toRemove);
              }
          }
  
          if (toRemove.mPrevious != null) {
              toRemove.mPrevious.mNext = toRemove.mNext;
          } else {
              mStart = toRemove.mNext;
          }
  
          if (toRemove.mNext != null) {
              toRemove.mNext.mPrevious = toRemove.mPrevious;
          } else {
              mEnd = toRemove.mPrevious;
          }
  
          toRemove.mNext = null;
          toRemove.mPrevious = null;
          return toRemove.mValue;
      }
docs: Removes the mapping for a key from this map if it is present.
  
  @param key key whose mapping is to be removed from the map
  @return the previous value associated with the specified key,
  or {@code null} if there was no mapping for the key