के लिए विशिष्ट विवरण है विधि का कहना है:
रिटर्न सच अगर और सिर्फ़ अगर इस संग्रह कम से कम एक तत्व ई ऐसी है कि (o==null ? e==null : o.equals(e))
[डॉक्स ओरेकल] [1]
हालांकि शामिल , यह भी कहता है कि यदि संग्रह निर्दिष्ट तत्व का प्रकार इस संग्रह के साथ असंगत है, तो संग्रह NullPointerException
फेंक सकता है यदि संग्रह शून्य तत्वों या ClassCastException
को अनुमति नहीं देता है। इन्हें optional
के रूप में चिह्नित किया गया है।
इसके अलावा, यह भी कहता है कि:
संग्रह फ्रेमवर्क इंटरफेस में कई तरीके बराबरी विधि के मामले
लेकिन में परिभाषित कर रहे हैं:
इस विनिर्देशन नहीं होना चाहिए यह इंगित करने के लिए माना जाता है कि एक गैर-शून्य तर्क के साथ संग्रह.contains का आह्वान ओ oequals (ई) किसी तत्व के लिए लागू किया जाएगा e
इसलिए, मेरा निष्कर्ष यह है कि यह कुछ प्रकार की हैक है जो कार्यान्वयन को विभिन्न व्यवहारों को परिभाषित करने की अनुमति देता है (उदा। शून्य तत्वों को स्वीकार करना) और अनुकूलन (उदा। कक्षा के बराबर विधि को ओवरराइड करना ताकि आप यह जांच सकें कि संग्रह में कोई तत्व निहित है या नहीं)।
मैं एक उदाहरण के साथ नवीनतम समझाएंगे:
public class A {
public void initialize() {
// Lots of code and heavy initialization
}
public String id;
@Override
public int hashCode() {
return id.hashCode();
}
@Override
public boolean equals(Object o) {
return this.hashCode() == o.hashCode();
}
}
और फिर:
SomeCollection<A> collection = new SomeCollection<A>();
// Create an element and add it to the collection
A a = new A();
a.initialize(); // Heavy initialization
element.id = "abc";
collection.add(a);
// Check if the collection contains that element
// We create a second object with the same id, but we do not initialize it
A b = new A();
b.id = "abc";
// This works for many common collections (i.e. ArrayList and HashSet)
collection.contains(b);
वास्तव में, वहाँ indexOf(Object o)
और remove(Object o)
जो इस का पालन करें की तरह अधिक तरीके हैं। इसलिए मुझे नहीं लगता कि यह संगतता के लिए है, लेकिन यह इस तरह के समाधानों की अनुमति देने के उद्देश्य से बनाया गया है।
http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#contains(java.lang.Object)
यहाँ इस विषय http://www.javaworld.com/article/2073330/the-contains-trap-in-java-collections.html – nem035
संबंधित पर एक अच्छा पढ़ा है, या कहें की नकल http://stackoverflow.com/questions/857420/what-are-the-reasons-why-map-getobject-key-is-not-fully-generic और http: // stackoverflow।कॉम/प्रश्न/10479 9/क्यों-हैंन्ट-जावा-संग्रह-हटाने-विधियों-जेनेरिक – Marco13