Yeah, something like that. Examples: user has a key whose equals/hashCode does not control (does not have the source code, or cannot modify it) and it happens to be buggy or incomplete, so instead of wrapping the key in another key, it can provide a function to compare the objects properly, without the cost of wrapping.