2015-06-29 14 views
6

0 ve 1 dizinleriyle bir ArrayList öğesindeki öğeleri kaldırmak istiyorum. Fakat bu işe yaramıyor ve yol bilmiyorum. aşağıdaki gibiArrayList öğesini 0 ve 1 endeksi ile kaldırın

kodu (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()); 



    } 
} 

çıkış

A 
B 
C 

A 
B 
C 

olduğu Fakat çıkış ben kaldırmak aradığınız çünkü olduğuna inanıyoruz

A 
B 
C 

C 

cevap

6

olmalıdır görünüyor Collection üzerinde. Toplama, yöntemi kaldırmayı (int) bildirmez, ancak (Object) öğesini kaldırır, bu nedenle java, int'nizi bir Tamsayıya otomatik kutuya çeker. Ancak, bu tam sayı Koleksiyonda olmadığından hiçbir şey kaldırılmıyor

2

Önemli bir derse bastığınızı düşünüyorum.

Sorun, Koleksiyon'un remove(int), yalnızca remove(Object)'u desteklememesidir. Bu yüzden derleyici int'nizi bir Tamsayı olarak kutluyor, bu öğe koleksiyonda değil ve bu yüzden onu kaldırmıyor.

Koleksiyonu koleksiyon olarak bir ArrayList olarak bildirirseniz, çalışır.

0

Koleksiyonlar yalnızca veri koleksiyonudur, bu nedenle siparişleri her zaman korumazlar. @ControlAltDel tarafından belirtildiği gibi ben Collectionremove(int) sadece remove(Object) desteklemez, bir 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

ile koleksiyon değiştirilmesi tavsiye ediyorum ve intInteger için otomatik kutulu ve Integer koleksiyonunda olmadığını ediliyor; bu yüzden hiçbir şey kaldırılmaz.

c koleksiyonunu saklamak istiyorsanız, Iterator.remove()'u kullanarak ilk iki öğeyi kaldırabilirsiniz; Böyle:

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
değiştirme

senin c ArrayListçünkü:

Collection.remove (Object o)

bu koleksiyondan belirtilen elemanın tek bir örneğini kaldırır, mevcut ise (isteğe bağlı çalışma). Daha resmi, örneğin bir parça e kaldırır (o == boş e == null: o.equals (e)) bu c.remove ("A") ise Yukarıda

; işe yarayacak. c.remove (1) yazılması; kaldırılacak bir Tamsayı nesnesi arıyor.

ArrayList.remove (int indeks)

bu listede belirtilen konumdaki öğesini kaldırır. Sonraki öğeleri sola kaydırır (indekslerinden çıkarır).

Yani program aşağıdaki gibi olmalıdır: Gerçekten gerekenler

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"); 

yerine sen Collection kullanmaya devam etmek istiyorsanız endekslerini kullanarak onlara atıfta olduğunu. Bunun nedeni, Collection numaralı remove yönteminin Object argümanını beklemesidir. Bu nedenle, c.remove(0) yazdığınızda, 0 öğesinin listesini arar ve kaldırmaya çalışır.

Lütfen, bu durum için yerine Collection kullanırken performans açısından avantajları dikkate alınız.

İlgili konular