मैं निम्नलिखित वर्ग है को लागू करने के बावजूद डुप्लिकेट प्रविष्टियों जोड़ता है:HashSet दोनों hashCode() और बराबरी()
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());
मैं हो रही है:, अब
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;
}
}
अगर मैं निम्नलिखित कोड लिखने निम्नलिखित उत्पादन:
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)
कृपया मुझे समझने में मदद क्यों होता है() झूठे रिटर्न (बराबर() और hashCode के बाद भी() एक ही मूल्य वापस करें) और मैं इसे कैसे सुधार सकता हूं (यानी। जावा को डुप्लिकेट तत्व जोड़ने से रोकना)। अग्रिम में धन्यवाद।
वाह! यह बहुत अच्छा होगा यदि सभी प्रश्न इतने स्पष्ट और समझदार हैं, और पुन: उत्पन्न करने के लिए कोड और आउटपुट हैं। बहुत बढ़िया! – Seelenvirtuose