> On 7/12/2010 2:38 PM, Stefan wrote:
> > Hello,
> > I guess my problem is "no-brainer" to some of you, but for now I fell
> > completely helpless. Here is an easiest example:
> > package test;
> > import java.util.*;
> > class Vertex {
> > int number;
> > public Vertex(int number) {
> > this.number = number;
> > }
> > public String toString() {
> > return number + "";
> > }
> > @Override
> > public boolean equals(Object obj) {
> > return this.number == ((Vertex) obj).number;
> > }
> > }
> > public class SetTest {
> > public static void main(String[] args) {
> > Set vertices = new HashSet();
> > Vertex a = new Vertex(2);
> > Vertex b = new Vertex(3);
> > Vertex c = new Vertex(3);
> > System.out.println(b.equals(c));
> > vertices.add(a);
> > vertices.add(b);
> > vertices.add(c);
> > System.out.println(vertices);
> > }
> > }
> > Console prints:
> > true (b equals c)
> > [3, 2, 3] (Vertex was added to set althought it equals another Vertex)
> "I observed immediately that the malefactor had made one crucial
> error in carrying out his fiendish plan: He forgot to override the
> hashCode() method when overriding equals(). As any student of the art
> of detection knows well, these two are inseparable: Override both, or
> override neither, or invoke chaos upon yourself -- as many a resident
> of Her Majesty's Gaols can testify tearfully."
> "Astounding, Holmes!"
> "Elementary, my dear Watson. I also note that this perpetrator is
> a particularly clumsy example of the species, having implemented an
> equals() that fails miserably if given an argument that is `null', say,
> or a reference to anything other than a `Vertex' instance. Like so many
> of the criminal underclass, he fails to consider the consequences of his
> actions in a wider context than his immediate plot."
> "The criminal `underclass', Holmes? Surely you meant `subclass'."
> "You're starting to get on my nerves, Watson. Must I uncase my
> violin again?"
> "I say, Holmes, I believe I'll go out for a bit of a stroll."
> --
> Eric Sosman
> esos...@ieee-dot-org.invalid