Answering my own inquiry...
Another good explanation is in Bruce
Eckel's Thinking In Java, 2nd Edition.
This topic is now on the Certified Java
Programmer Exam ( detecting proper and
improper implementations of the hashCode
method )
--- Java exams <[EMAIL PROTECTED]> wrote:
>
> Any other opinions on the proper versus
> improper question or any real life observed
> "gotchas" here ?
>
> --- Greg Nudelman <[EMAIL PROTECTED]> wrote:
> > <REF>
> > There is a great discussion of this in my fav.
> > book: Effective Java by J.
> > Bloch.
> > </REF>
> >
> > Just like the doc says, it is basically the number
> > "index" under which the
> > object will be hashed in the Hashtable etc. If
> > you're going to store a
> > bunch of these in a collection, you're better off
> > making sure that your
> > hashCodes are different for unequal instances of
> > this object, so the hashing
> > function does not have to provide an extra
> > "differentiation number", which
> > will decrease it's "find" efficiency, and make it
> > more dependent on (n).
> >
> > So you must take into account all the internals of
> > your object. With custom
> > collections, or internalized collections, I
> remember
> > reading that a good way
> > to do this, is to multiply the individual hashing
> > code of each object
> > contained in the collection, by its index in the
> > collection.
> >
> >
> > For ex: let's say you got a vector of {a, b, c} in
> > the custom object abc for
> > which you need a hashCode.
> >
> > you would do something like:
> > int hashCode = 0;
> >
> > for(int i = 0; i < vector.size(); i++) {
> > hashCode += ((vector.elementAt(i)).hashCode() *
> i);
> >
> > }
> >
> >
> > this way, you will avoid the same hashCode being
> > produced by:
> > object cba contains Vector {c, b, a}
> >
> > You can also do this for List, Set, etc. by
> getting
> > an Enumeration and
> > iterating through the ellements.
> >
> > Multiplying i by a good-sized prime number is also
> a
> > good tip I heard.
> >
> > Any thoughts?
> >
> > Greg
> >
> >
> >
> > -----Original Message-----
> > From: Java exams [mailto:[EMAIL PROTECTED]]
> > Sent: Tuesday, June 25, 2002 9:05 AM
> > To: JDJList
> > Subject: [jdjlist] Proper ( or improper )
> > implementation of the hashCode
> > method
> >
> >
> >
> > What distinguishes a proper ( versus an improper )
> > implementation of the hashCode() method?
> >
> > What do I need to "watch out" for when
> > implementing a hashCode() method? Any
> > "learned the hard way" lessons people have to
> > share on proper versus improper implementations of
>
> > hashCode? Anything unique when dealing with
> > Collection classes?
> >
> >
> >
> > Here is text from java.lang.Object:
> >
> > The general contract of hashCode is:
> >
> > Whenever it is invoked on the same object more
> than
> > once during an execution of a Java application,
> the
> > hashCode method must consistently return the same
> > integer, provided no information used in equals
> > comparisons on the object is modified. This
> integer
> > need not remain consistent from one execution of
> an
> > application to another execution of the same
> > application.
> >
> > If two objects are equal according to the
> > equals(Object) method, then calling the hashCode
> > method on each of the two objects must produce the
> > same integer result.
> >
> > It is not required that if two objects are unequal
> > according to the equals(java.lang.Object) method,
> > then
> > calling the hashCode method on each of the two
> > objects
> > must produce distinct integer results. However,
> the
> > programmer should be aware that producing distinct
> > integer results for unequal objects may improve
> the
> > performance of hashtables.
> >
> > As much as is reasonably practical, the hashCode
> > method defined by class Object does return
> distinct
> > integers for distinct objects. (This is typically
> > implemented by converting the internal address of
> > the
> > object into an integer, but this implementation
> > technique is not required by the JavaTM
> programming
> > language.)
> >
> >
> > __________________________________________________
> > Do You Yahoo!?
> > Yahoo! - Official partner of 2002 FIFA World Cup
> > http://fifaworldcup.yahoo.com
> >
> > To change your membership options, refer to:
> > http://www.sys-con.com/java/list.cfm
> >
> >
> > To change your membership options, refer to:
> > http://www.sys-con.com/java/list.cfm
> >
>
>
> __________________________________________________
> Do You Yahoo!?
> Yahoo! - Official partner of 2002 FIFA World Cup
> http://fifaworldcup.yahoo.com
>
> To change your membership options, refer to:
> http://www.sys-con.com/java/list.cfm
__________________________________________________
Do You Yahoo!?
Yahoo! - Official partner of 2002 FIFA World Cup
http://fifaworldcup.yahoo.com
To change your membership options, refer to:
http://www.sys-con.com/java/list.cfm