Java – HashSet adds duplicate entries, although hashcode() and equals() are implemented
•
Java
I have the following categories:
class Point { double x,y; // .... constructor and other functions here public boolean equals(Point p) { if(p==null) return(false); return(x==p.x && y==p.y); } public int hashCode() { int result=17; long c1=Double.doubleToLongBits(x); long c2=Double.doubleToLongBits(y); int ci1=(int)(c1 ^ (c1 >>> 32)); int ci2=(int)(c2 ^ (c2 >>> 32)); result = 31 * result + ci1; result = 31 * result + ci2; return result; } }
Now, if I write the following code:
Point x=new Point(11,7); Point y=new Point(11,7); System.out.println("hash-code of x=" + x.hashCode()); System.out.println("hash-code of y=" + y.hashCode()); System.out.println("x.equals(y) = " + x.equals(y)); System.out.println("x==y = " + (x==y)); java.util.HashSet<Point> s=new java.util.HashSet<Point>(); s.add(x); System.out.println("Contains "+y.toString()+" = "+s.contains(y)); s.add(y); System.out.println("Set size: "+s.size()); java.util.Iterator<Point> itr=s.iterator(); while(itr.hasNext()) System.out.println(itr.next().toString());
I get the following output:
hash-code of x=79052753 hash-code of y=79052753 x.equals(y) = true x==y = false Contains (11.0,7.0) = false Set size: 2 (11.0,7.0) (11.0,7.0)
Please help me understand why contains () returns false (even after equals () and hashcode () return the same value) and how I can solve this problem (that is, prevent Java from adding duplicate elements) Thank you in advance
Solution
You will not override the equals method in object
The signature of the equals method is:
public boolean equals(Object obj)
Not at all
public boolean equals(Point obj)
Do not use = = to compare double values You should use double Equals instead
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码