2013-02-27 192 views
5

के साथ जब मैं जावा में ऐरेलिस्ट का उपयोग करता हूं, तो कुछ चीजें हैं जिन्हें मैं समझ नहीं पा रहा हूं।ऐरेलिस्ट <Integer> प्राप्त/निकालने विधि

list.remove (0) // delete the object in the first box 

लेकिन कभी कभी मैं इसकी सामग्री द्वारा किसी वस्तु को नष्ट करना चाहते:

list.remove (0) // delete the object HAS Which value of 0 

ArrayList<Integer> list = new ArrayList <Integer>(); 
list.add (0); 
list.add (1); 

कभी कभी मैं अपने सूचकांक द्वारा किसी वस्तु को हटाने की जरूरत: यहाँ मेरी प्रवर्तन कोड है यह कोड बहुत संदिग्ध है। क्या मैं कोड में करना चाहते हैं स्पष्ट करने के लिए, मैं इस तरह के प्रकार का उल्लेख:

list.remove ((Object) 0) // delete the object which has a value of 0 

मैं नहीं है एसी, पता करने के लिए जो पद्धतियों को बुलाया जाता एक ही रास्ता करने के लिए विधि पर माउस सूचक डाल करने के लिए है, तो देखें: java.util.ArrayList.remove बूलियन (ऑब्जेक्ट ऑब्जेक्ट)

जावा लेकिन यह कैसे अंतर करता है? कोई विधि सूचक है? क्या ऐसा करने के लिए कोई कम अस्पष्ट तरीका है?

बहुत धन्यवाद, मेरी अंग्रेजी के लिए खेद है।

पुनश्च: मैं कहना चाहिए कि मैं अंत में SparseIntArray इस्तेमाल किया, लेकिन मैं दिलचस्प

उत्तर

8

हूँ staters लिए। List#remove(index) ऑब्जेक्ट को सूची से हटा दिया गया है। List#remove(Object) एक बुलियन लौटाता है।

हालांकि इस विशेष मामले में। तुम यह कर सकते थे ।

ArrayList<Integer> list = new ArrayList <Integer>(); 
     list.add (0); 
     list.add (1); 
     System.out.println(list.remove(new Integer(0))); 
+0

हाँ मैंने यह देखा। लेकिन अगर मैं रिटर्न वैल्यू का उपयोग नहीं करता हूं, तो मुझे आश्चर्य है कि जावा कैसे अंतर बनाता है, ऑटोबॉक्सिंग कैसे काम करता है। –

+0

@juliendumortier यह इस विशेष परिदृश्य में भ्रमित है। लेकिन यदि आप वस्तु के मामले में सामान्य रूप से इसके बारे में सोचते हैं तो ऐसा लगता है। 'list.remove (पशु) 'या' list.remove (watever भी)'। – PermGenError

+0

ठीक है धन्यवाद! अन्तिम प्रश्न। System.out.println (सूची।हटाएं ((पूर्णांक) 0); यह एक अच्छा/बुरा अभ्यास है? (यह एक नया उदाहरण बनाने से बचाता है)। –

2

जब भी जावा में एक अस्पष्टता (जब कई विधि हस्ताक्षर संकलन समय में पैरामीटर के प्रकार से मेल खा सकते), डाले का उपयोग कर सही विधि का चयन करने के लिए अपने एकमात्र विकल्प है नहीं है। निस्संदेह आप वास्तविक आमंत्रण से पहले स्थानीय चरों पर पैरामीटर डाले जा सकते हैं, लेकिन यह पाठक के लिए इसे स्पष्ट नहीं करता है - पैरामीटर कास्टिंग सीधे जहां इसे उपयोग किया जाता है, यह मेरी राय में सबसे अच्छा विकल्प है, यह स्पष्ट करने के लिए कि कौन सी विधि कहा जाता है।

जिस तरह से एपीआई इस मामले में इतना अजीब है कि एपीआई बनाया गया था, वहां कोई ऑटो बॉक्सिंग नहीं थी इसलिए पहली जगह अस्पष्ट कोड लिखना संभव नहीं था। हालांकि इसे स्पष्ट बनाने के लिए विधि को बदलना एक तोड़ने वाला परिवर्तन होगा। चूंकि एक सरणी सूची में इंटीजर को संग्रहीत करना किसी भी तरह का विचार नहीं है, वैसे भी, उन्होंने हमें थोड़ी परेशानी के साथ रहने का फैसला किया।

1

तो यह सिर्फ पूर्णांक ArrayList में निकालें() विधि के साथ अस्पष्टता आपको परेशान कर रहा है, तो आप को लागू करने के ArrayList विस्तार कर सकते हैं अपनी खुद की:

public class MyIntArrayList extends ArrayList<Integer> { 

    boolean removeByObject(Integer intObj) { 
     return super.remove(intObj); 
    } 

    Integer removeByIndex(int index) { 
     return super.remove(index); 
    } 

} 
0

आप list.remove(new Integer(0)) इस्तेमाल कर सकते हैं निश्चित रूप से वस्तु को दूर करने के