2011-01-04 21 views

उत्तर

10

किसी भी निर्माण परिप्रेक्ष्य से नहीं। दोनों ArrayList का उदाहरण बनाते हैं।

अंतर al सब (सुलभ) तरीकों और ArrayList वर्ग के क्षेत्र के लिए उपयोग की अनुमति देता है, कि, आप दूसरे उदाहरण में, alList इंटरफेस है, जबकि पर लागू सभी तरीकों के लिए उपयोग की अनुमति देता है, पहले उदाहरण में है।

अंगूठे का एक व्यावहारिक नियम: दूसरे पैटर्न का उपयोग करें। आप ArrayList कार्यान्वयन से कुछ अतिरिक्त उपहार की जरूरत है, तो आप हमेशा डाली कर सकते हैं:

List list = new ArrayList(); 
// do some adds/removes/... on the list 
((ArrayList) list).trimToSize(); 
+0

Thnk u abdreas डी लेकिन 1 चीज अंगूठे का नियम क्या है? –

+0

@ हरि कन्ना - यदि उपलब्ध हो, तो एक इंटरफ़ेस प्रकार का उपयोग करें, इसलिए 'सूची' या यहां तक ​​कि' संग्रह '। मैं सभी मामलों में 99.5% में यही करता हूं। –

7

इसके 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; 
} 

कोड बुला, जबकि पूर्व के साथ वापसी प्रकार को बदलने की जरूरत में कोई परिवर्तन नहीं, है कि अंततः रूप में अच्छी तरह बुला कोड ऊपर पेंच हैं ।

+0

कृपया विस्तार से समझाएं –

+4

@ हरि कन्ना: मैं बस ऐसा कर रहा था :)। –

7

Paraphrasing my answerthis very similar question के बारे में Map बनाम HashMap:

वस्तुओं के बीच कोई अंतर नहीं है। इंटरफ़ेस में आपके पास कोई अंतर है। पहले मामले में, इंटरफ़ेस ArrayList है, जबकि दूसरे में यह List है। अंतर्निहित वस्तु, हालांकि, वही है।

List का उपयोग करने का लाभ यह है कि आप अंतर्निहित वस्तु को किसी भी कोड के साथ अपने अनुबंध को तोड़ने के बिना एक अलग प्रकार की सूची के रूप में बदल सकते हैं। यदि आप इसे ArrayList के रूप में घोषित करते हैं, तो आप अंतर्निहित कार्यान्वयन को बदलना चाहते हैं तो आपको अपना अनुबंध बदलना होगा।

+0

आह, और यह पता चला कि 'सूची' का उपयोग करके एक सटीक डुप्लिकेट था। :-) –