सेट में दो समान ऑब्जेक्ट जोड़ने के बाद, मैं उम्मीद करता हूं कि सेट में केवल एक तत्व हो।जावा: सेट में 2 समान ऑब्जेक्ट जोड़ने के बाद, इसमें 2 तत्व
public void addIdenticalObjectsToSet(){
Set<Foo> set = new HashSet<Foo>();
set.add(new Foo("totoro"));
set.add(new Foo("totoro"));
Assert.assertEquals(1, set.size()); // PROBLEM: SIZE=2
}
private class Foo {
private String id;
public Foo(String id) {
this.id = id;
}
public String getId() {
return id;
}
public boolean equals(Object obj) {
return obj!= null && obj instanceof Foo &&
((Foo)obj).getId().equals(this.getId());
}
public int hashcode() {
return this.getId().hashCode();
}
}
मैं दो वस्तुओं को समान मानता हूं यदि उनके पास एक ही आईडी (स्ट्रिंग) है।
अन्य अजीब चीज: न तो Foo.equals और न ही Foo.hashcode तक पहुंचा जा सकता है, जहां तक मैं डीबग/ब्रेकपॉइंट्स का उपयोग करके बता सकता हूं। मैं क्या खो रहा हूँ?
@ ओवरराइड एनोटेशन –
का उपयोग करने का प्रयास करें उन विधियों पर @ ओवरराइड लागू करने का प्रयास करें जो आपको लगता है कि –