Given a hash code, check if a Set contains an object

I have overriden equals and hashCode for a custom object Foo. Now, I have the hash code of an object and would like to check if the object is contained in the Set<Foo> fooSet. Is there a more efficient way to search for it other than

for(Foo o : fooSet) {
       if(o.hashCode == inputCode) {
          return true;
       }
 }
Jon Skeet
people
quotationmark

You basically can't determine it reliably based on a hash code. You can check that a value definitely isn't in the set, but even if you find a matching hash code that doesn't mean that the value is in the set. This is rarely useful, which is why there's nothing which exposes the functionality within Set. I don't know of any faster way of achieving this half-result. (Note that if you've just got a Set rather than a HashSet, there may well be nothing in the internal data structures which has recorded hash codes anyway...)

If you really only care about the presence of a hash code, just store a Set<Integer> instead of the full set. But it's not terribly useful to do so, usually.

people

See more on this question at Stackoverflow