संभव डुप्लिकेट:
List versus ArrayListओओपी: ArrayList al = new ArrayList() और सूची अल = नया ArrayList() के बीच अंतर?
अंतर
ArrayList al = new ArrayList()
और
List al = new ArrayList() ?
संभव डुप्लिकेट:
List versus ArrayListओओपी: ArrayList al = new ArrayList() और सूची अल = नया ArrayList() के बीच अंतर?
अंतर
ArrayList al = new ArrayList()
और
List al = new ArrayList() ?
किसी भी निर्माण परिप्रेक्ष्य से नहीं। दोनों ArrayList
का उदाहरण बनाते हैं।
अंतर al
सब (सुलभ) तरीकों और ArrayList
वर्ग के क्षेत्र के लिए उपयोग की अनुमति देता है, कि, आप दूसरे उदाहरण में, al
List
इंटरफेस है, जबकि पर लागू सभी तरीकों के लिए उपयोग की अनुमति देता है, पहले उदाहरण में है।
अंगूठे का एक व्यावहारिक नियम: दूसरे पैटर्न का उपयोग करें। आप ArrayList
कार्यान्वयन से कुछ अतिरिक्त उपहार की जरूरत है, तो आप हमेशा डाली कर सकते हैं:
List list = new ArrayList();
// do some adds/removes/... on the list
((ArrayList) list).trimToSize();
इसके prog कहा जाता है के बीच इंटरफेस के लिए ramming। मान लीजिए, आपको अपनी विधि से list
वापस करने की आवश्यकता है। तो कॉलिंग कोड में List
चर हो सकता है।
public ArrayList getList() {
ArrayList list = new ArrayList();
// do something with the list here
return list;
}
और यह,
public List getList() {
List list = new ArrayList();
// do something with the list here
return list;
}
अब उत्तरार्द्ध विधि बुला कोड के लिए List
प्रकार चर में लौट आए सूची हो सकता है। और आप आसानी से बाद में तय कर सकते हैं, किसी कारण, कुछ इस तरह के लिए,
public List getList() {
List list = new LinkedList();
// do something with the list here
return list;
}
कोड बुला, जबकि पूर्व के साथ वापसी प्रकार को बदलने की जरूरत में कोई परिवर्तन नहीं, है कि अंततः रूप में अच्छी तरह बुला कोड ऊपर पेंच हैं ।
कृपया विस्तार से समझाएं –
@ हरि कन्ना: मैं बस ऐसा कर रहा था :)। –
Paraphrasing my answerthis very similar question के बारे में Map
बनाम HashMap
:
वस्तुओं के बीच कोई अंतर नहीं है। इंटरफ़ेस में आपके पास कोई अंतर है। पहले मामले में, इंटरफ़ेस ArrayList
है, जबकि दूसरे में यह List
है। अंतर्निहित वस्तु, हालांकि, वही है।
List
का उपयोग करने का लाभ यह है कि आप अंतर्निहित वस्तु को किसी भी कोड के साथ अपने अनुबंध को तोड़ने के बिना एक अलग प्रकार की सूची के रूप में बदल सकते हैं। यदि आप इसे ArrayList
के रूप में घोषित करते हैं, तो आप अंतर्निहित कार्यान्वयन को बदलना चाहते हैं तो आपको अपना अनुबंध बदलना होगा।
आह, और यह पता चला कि 'सूची' का उपयोग करके एक सटीक डुप्लिकेट था। :-) –
Thnk u abdreas डी लेकिन 1 चीज अंगूठे का नियम क्या है? –
@ हरि कन्ना - यदि उपलब्ध हो, तो एक इंटरफ़ेस प्रकार का उपयोग करें, इसलिए 'सूची' या यहां तक कि' संग्रह '। मैं सभी मामलों में 99.5% में यही करता हूं। –