code: @Override
      public void remove(long key, T element) {
      	if (first.value == key && ObjectUtil.equalsOrNull(element, first.element)) {
      		removeMin();
      		return;
      	}
      	if (last.value == key && ObjectUtil.equalsOrNull(element, last.element)) {
      		removeMax();
      		return;
      	}
      	
      	// if both children of root are black, set root to red
      	if ((root.left == null || !root.left.red) && (root.right == null || !root.right.red))
              root.red = true;
  
          root = remove(root, key, element);
          if (root != null) root.red = false;
      }
docs: Remove the node containing the given key and element. The node MUST exists, else the tree won't be valid anymore.