I haven't followed this thread closely so I apologize in advance if I am somewhat off topic but I think what I have to say may be of interest to some of you. I think the current method of determining a hash value for a collection is fine in the general case and if it is inadequate for your particular needs then implement your own collection class that does what you want.
This was the case for one of my applications so I created classes HashArray and HashSet. Both of these classes used as their hash value the XOR of the the hash values of the collection elements (which was of course stored in an instance variable). Each time an element was added, removed, or replaced in the collection the hash value of the collection had to be recomputed (required O(1) time). Of course this approach breaks down if the collection elements can change their hash values. My solution is not ideal for the hashArray case because two hashArrays containing the same elements but in a different order would have the same hash value. But this didn't matter for my application because I used hashArrays as a set converted into an array (with values sorted) for time/space efficiency reasons. This worked really well for me, in part because the elements stored in the hashArrays and hashSets also had really good hash values. Also note that, in my application, two hashArrays or hashSets containing the same elements were considered to be equal. If anyone makes use of this idea I wouldn't mind a quick email on your experience. Ralph Boland
