This feels like a dangerous implementation.  It is possible (though unlikely) that external callers are relying on the default equality/hashcode behavior.  Silently substituting a subclass doesn't seem to fit what you are trying to accomplish here.  Perhaps you can have ComparableII keep the original II around as a private field, then transform the final set back into the original IIs before returning?