code: V removeMapping(final Object o) {
          if (!(o instanceof Map.Entry)) {
              throw new IllegalArgumentException();
          }
  
          @SuppressWarnings("unchecked") final Entry<? extends CharSequence, V> e = (Map.Entry<? extends CharSequence, V>) o;
          final CharSequence key = keyCheck(e.getKey());
          final V value = e.getValue();
          final TrieNode<V> currentNode = findPreviousNode(key);
  
          if (currentNode == null) {
  			/* Node not found for the given key */
              return null;
          }
  
          final TrieNode<V> node = currentNode.children.get(key.charAt(key
                  .length() - 1));
  
          if (node == null || !node.inUse) {
  			/* Node not found for the given key or is not in use */
              return null;
          }
  
          final V removed = node.value;
  
          if (removed != value && (removed == null || !removed.equals(value))) {
  			/*
  			 * Value in the map differs from the value given in the entry so do
  			 * nothing and return null.
  			 */
              return null;
          }
  
          node.unset();
          --size;
          ++modCount;
  
          if (node.children.isEmpty()) {
  			/* Since there are no children left, we can compact the trie */
              compact(key);
          }
  
          return removed;
      }
docs: Special version of remove for EntrySet.