मेरे पास Test
ऑब्जेक्ट्स हैं, जो स्ट्रिंग का उपयोग समानता जांच के रूप में करते हैं। मैं यह जांचने के लिए List.contains()
का उपयोग करने में सक्षम होना चाहता हूं कि सूची में कोई ऑब्जेक्ट है जो एक निश्चित स्ट्रिंग का उपयोग करता है।List.contains() काम करता है .equals() काम करता है
सीधे शब्दों में:
Test a = new Test("a");
a.equals("a"); // True
List<Test> test = new ArrayList<Test>();
test.add(a);
test.contains("a"); // False!
बराबर और हैश समारोह:
@Override
public boolean equals(Object o) {
if (o == null) return false;
if (o == this) return true;
if (!(o instanceof Test)) {
return (o instanceof String) && (name.equals(o));
}
Test t = (Test)o;
return name.equals(t.GetName());
}
@Override
public int hashCode() {
return name.hashCode();
}
मैंने पढ़ा है, यह equals
ओवरराइड करने के लिए की जरूरत है कि एक कस्टम वर्ग के लिए यकीन है कि contains
काम करता है बनाने के लिए। इस प्रकार यह मेरे लिए बहुत अजीब बात है कि equals
सच है, contains
झूठी वापसी करता है।
मैं यह काम कैसे कर सकता हूं?
एक वर्ग को केवल उसी वर्ग के साथ 'बराबर' का परीक्षण करना चाहिए। – ZhongYu
आपके बराबर 'इक्विल्स' का विचार गलत है, आपको 'टेस्ट' की तुलना' टेस्ट' की तुलना करना चाहिए 'टेस्ट' – MadProgrammer
केवल एक विपरीत रिवर्स काम करेगा, क्योंकि "एक" .equals (नया टेस्ट ("ए")) == झूठी' – njzk2