I think there's the potential for error having the remove overloaded. What happens when we try to remove an Object that happens to be a Comparable?  It will run the remove(Comparable), which is expecting a key, not a value to remove.  I think that if we're to implement the Set interface, then the previous remove should be renamed (suggestion removeKey)