2015-06-29 16 views
6

के साथ ArrayList तत्व निकालें I इंडेक्स 0 और 1 के साथ एक ऐरेलिस्ट में तत्वों को निकालना चाहते हैं। लेकिन यह काम नहीं करता है और मुझे रास्ता नहीं पता है।इंड्रे 0 और 1

कोड इस प्रकार (int) लग रहा है

import java.util.ArrayList; 
import java.util.Collection; 
import java.util.Iterator; 


public class Test{ 

    public static void main(String[] args){ 
     Collection c = new ArrayList(); 

     c.add("A"); 
     c.add("B"); 
     c.add("C"); 

     for(Iterator i = c.iterator(); i.hasNext();) 
      System.out.println(i.next()); 

     System.out.println(""); 
     c.remove(1); 
     c.remove(0); 

     for(Iterator i = c.iterator(); i.hasNext();) 
      System.out.println(i.next()); 



    } 
} 

उत्पादन

A 
B 
C 

A 
B 
C 

है लेकिन उत्पादन

A 
B 
C 

C 

उत्तर

6

होना चाहिए मेरा मानना ​​है कि ऐसा इसलिए है क्योंकि आप बुला रहे हैं को दूर Collection पर। संग्रह विधि को हटाने (int) घोषित नहीं करता है, लेकिन हटा दिया गया है (ऑब्जेक्ट), इसलिए जावा आपके इंट को इंटीजर में ऑटोबॉक्स कर रहा है। लेकिन चूंकि उस पूर्णांक संग्रह में नहीं है, इसलिए

2

मुझे लगता है कि आपने एक महत्वपूर्ण सबक पर मारा है।

समस्या यह है कि संग्रह remove(int) का समर्थन नहीं करता है, केवल remove(Object)। तो संकलक आपके इंटीजर के रूप में मुक्केबाजी कर रहा है, वह तत्व संग्रह में नहीं है, और इसलिए यह इसे हटा नहीं रहा है।

यदि आप संग्रह को ऐरेलिस्ट के रूप में घोषित करते हैं, तो यह काम करता है।

0

संग्रह केवल डेटा संग्रहित करते हैं ताकि वे हमेशा आदेश को सुरक्षित न रखें। मैं @ControlAltDel ने उल्लेख किया एक ArrayList

public class Test{ 


public static void main(String[] args){ 
    ArrayList c = new ArrayList(); 

    c.add("A"); 
    c.add("B"); 
    c.add("C"); 

    for(Iterator i = c.iterator(); i.hasNext();) 
     System.out.println(i.next()); 

    System.out.println(""); 
    c.remove(1); 
    c.remove(0); 

    for(Iterator i = c.iterator(); i.hasNext();) 
     System.out.println(i.next()); 



} 
} 
1

साथ संग्रह की जगह की सिफारिश करेंगे, Collectionremove(int) केवल remove(Object) का समर्थन नहीं करता और int किया जा रहा Integer करने के लिए स्वतः बॉक्सिंग और उस Integer संग्रह में नहीं है; तो कुछ भी हटा दिया नहीं गया है।

यदि आप संग्रह के रूप में c रखना चाहते हैं तो आप Iterator.remove() का उपयोग करके पहले दो आइटम हटा सकते हैं; इस तरह:

public static void main(final String[] args){ 
    Collection<String> c = new ArrayList<>(Arrays.asList("A","B","C")); 

    for(String str : c) 
     System.out.println(str); 
    System.out.println(); 

    Iterator<String> it = c.iterator(); 
    it.next(); 
    it.remove(); 
    it.next(); 
    it.remove(); 

    for(String str : c) 
     System.out.println(str); 
} 
2

बदलें अपनी ArrayList क्योंकि:

Collection.remove (वस्तु ओ)

इस संग्रह से निर्दिष्ट तत्व का एक उदाहरण निकालता है, यदि यह मौजूद है (वैकल्पिक ऑपरेशन)। अधिक औपचारिक रूप से, एक तत्व ई ऐसे निकाल देता है कि (ओ == बातिल ई == बातिल: o.equals (ई))

ऊपर में अगर यह c.remove ('ए') था, यह काम करेगा। लेखन c.remove (1); हटाए जाने के लिए एक इंटेगर ऑब्जेक्ट की तलाश में है।

ArrayList.remove (पूर्णांक सूचकांक)

इस सूची में निर्दिष्ट स्थान पर तत्व निकाल देता है। किसी भी बाद के तत्वों को बाईं ओर स्थानांतरित करता है (उनके सूचकांक से एक को घटाता है)।

तो अपने कार्यक्रम के रूप में पालन किया जाना चाहिए:

public class Test{ 

    public static void main(String[] args){ 
     ArrayList c = new ArrayList(); 

     c.add("A"); 
     c.add("B"); 
     c.add("C"); 

     for(Iterator i = c.iterator(); i.hasNext();) 
      System.out.println(i.next()); 

     System.out.println(""); 
     c.remove(1); 
     c.remove(0); 

     for(Iterator i = c.iterator(); i.hasNext();) 
      System.out.println(i.next()); 
    } 
} 
1

क्या तुम सच में की जरूरत है

c.remove((String)"A"); 
c.remove((String)"B"); 

बजाय उन्हें की चर्चा करते हुए सूचकांकों का उपयोग कर यदि आप Collection उपयोग जारी रखना चाहते है। इसका कारण यह है कि removeCollection में विधि Object तर्क की अपेक्षा करता है। इसलिए, जब आप c.remove(0) लिखते हैं, तो यह तत्व 0 तत्व की खोज करता है और इसे हटाने का प्रयास करता है।

इस मामले के लिए List के बजाय Collection का उपयोग करते समय प्रदर्शन व्यापारऑफ पर विचार करें।

संबंधित मुद्दे