Re: Relationship between -isEqual and -hash
Re: Relationship between -isEqual and -hash
- Subject: Re: Relationship between -isEqual and -hash
- From: John Stiles <email@hidden>
- Date: Fri, 19 Jan 2007 13:52:56 -0800
On Jan 19, 2007, at 1:46 PM, Jeffrey J. Early wrote:
Quick question:
It is well stated in the documentation that the following must be
true:
If two objects are equal (as determined by the isEqual: method),
they must have the same hash value.
My question is whether the reverse must also hold?
I assume because it's not mentioned in the documentation (and I
can't think of a reason why), it must be okay.... but that isn't
necessarily good reasoning :-)
To be useful, a hash value must be smaller than the object
represented by the hash value. So in other words, you couldn't
encompass the whole set of possible objects in the whole set of
possible hashes.
So I don't think it's reasonable to assume that identical hash values
must mean identical objects. There's no mathematical way to guarantee
this without making hashes that are as large as the represented
objects, at which point the benefit of hashing largely disappears.
In my code I have a dictionary that I want to behave in a
particular way. I'm using objects as keys where if two objects are
'close enough', they will return the same value from the
dictionary, even if these objects aren't equal in the -isEqual:
sense. So when objects are 'close enough', I have them return the
same hash value.
This should be all right. If any outside code is assuming that equal
hashes means perfect equality, that code is broken.
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden