Doesn't this mean that no-one can call removeEntry and supply only the first two params (as it will be ambiguous).

I don't like default parameters in most situations - they just add confusion. I'd be inclined to stick with a single function. I'd probably just make the throw unconditional (and then be sure to looka t all the callers to make sure they handle an exception appropriately.