क्या आप जानते हैं कि:क्यों सार संग्रह समान() लागू नहीं करता है?
Map<Object,Object> m1 = new HashMap<Object, Object>();
Map<Object,Object> m2 = new HashMap<Object, Object>();
System.out.println("m1.equals(m2) = "+m1.equals(m2));
System.out.println("m1.keySet().equals(m2.keySet()) = "
+m1.keySet().equals(m2.keySet()));
System.out.println("m1.entrySet().equals(m2.entrySet()) = "
+m1.entrySet().equals(m2.entrySet()));
System.out.println("m1.values().equals(m2.values()) = "
+m1.values().equals(m2.values()));
उत्पादन होगा:
m1.equals(m2) = true
m1.keySet().equals(m2.keySet()) = true
m1.entrySet().equals(m2.entrySet()) = true
m1.values().equals(m2.values()) = false
इस तथ्य यह है कि AbstractCollection
(जिसमें से HashMap$Values
inherits) #equals()
ओवरराइड करता है नहीं करता है के कारण होता है।
क्या आपको पता है कि ऐसा क्यों है?
मुझे आपका जवाब पसंद है, आपने मेरे जैसा कुछ कहा है लेकिन बेहतर तरीके से। मान सेट या सूची नहीं है, लेकिन आप इसे बैग की तरह सोच सकते हैं। बैग semantics के साथ बराबर() लागू क्यों नहीं? –
@Motlin: मैं मानता हूं कि हमारे उत्तर समान हैं, दुर्भाग्य से हमने एक दूसरे के सेकंड के भीतर जवाब दिया।जहां तक बैग अर्थशास्त्र, एक कम्यूटिवेटिव शामिल है() चेक दुर्भाग्य से List.equals() और Set.equals() के अनुबंधों को तोड़ देगा (क्योंकि वे अब खुद को कम्यूटिव नहीं करेंगे)। –