The issue has to do with backward compatibility of existing code and specification.
What are the reasons why Map.get(Object key) is not (fully) generic
Its all in the details of the Javadoc:
boolean remove(Object o)
Removes a single instance of the specified
element from this collection, if it is present (optional operation).
More formally, removes an element e such that (o==null ? e==null :
o.equals(e)), if this collection contains one or more such elements.
Returns true if this collection contained the specified element (or
equivalently, if this collection changed as a result of the call).
So you see it doesn't matter whether the objects have the same type only that they equal.