[Newbies] Re: Somthing weird in Set

nicolas cellier ncellier at ifrance.com
Fri Dec 14 19:31:46 UTC 2007


It can happen most probably due to problems of hash code.
Two objects that are equal SHOULD have same hash code.
- either YourObject does define #= but does not define #hash
- or you add theObject to theSet, then modify theObject, which has side 
effect of modifying its hash code, and then theObject cannot be found in 
theSet (in which case you have a cure: theSet rehash)

scanFor: seems to do the right thing: find a slot corresponding to 
theObject hash, and look further if this slot is already occupied by 
anotherObject.
If storage is sparse enough and hash code are well distributed, this 
should lead to an efficient access cost near O(1), while Array includes: 
use a linear search O(n).

Nicolas


Hilaire Fernandes a écrit :
> How can the following happen ?
> 
> theSet includes: theOnject -> false
> theSet asArray includes: theObject -> true
> 
> previous sent messages to theSet were add: remove:ifAbsent:
> 
> 
> The Set>>ScanFor: looks strange.
> 
> Hilaire



More information about the Beginners mailing list