2013-10-07 19 views
6

Sonunda bir ArrayList'deki ilk öğeden yinelemenin mümkün olup olmadığını merak ediyorum, eğer öyleyse nasıl? Ben listeye eklenir son öğe kaldırmak gerekir, çünkü nedeniSondan bir ilk ArrayList nasıl yinelenir?

sadece bir dizi listesinin son öğe çıkarmak gerekirse
+3

Neden) (değil sadece 'list.remove (list.size do - 1) '? –

+1

Listenin api belgelerine bakmaya ne dersin. Doktorda "yineleyici" aranması yardımcı olmalıdır. –

+0

Adil ama bu Sen içeriklerini değiştiremez –

cevap

16

Hep böyle

List<String> myList = new ArrayList<String>(); 
... add code to populate the list with some data... 
for (int i = myList.size() - 1 ; i >= 0 ; i--) { 
    if (myList.get(i).equals("delete me")) { 
     myList.remove(i); 
    } 
} 

gibi bir dizini kullanarak sizin ArrayList yineleme mümkün olmakla birlikte size ArrayList silmenin öğelerin amaçla bir ListIterator<T> kullanarak daha iyi olurdu:

ListIterator<String> listIter = myList.listIterator(); 
while (listIter.hasNext()) { 
    if (listIter.next().equals("delete me")) { 
     listIter.remove(); 
    } 
} 

Listesi yineleyiciler de geriye listenizi yineleme için kullanılabilir - böyle:

ListIterator<String> listIter = myList.listIterator(myList.size()); 
while (listIter.hasPrevious()) { 
    String prev = listIter.previous(); 
    // Do something with prev here 
} 

Yineleyici başlangıç ​​endeksi geçen elemanın indeksi eşit olmalıdır + docs olarak 1. ki: "previous yönelik ilk çağrı belirtilen endeks eksi bir ile eleman dönecekti."

+0

Ancak bu seçenek ilk baştan sona değil mi? Öğeleri en baştan en iyi şekilde çıkarmam gerekiyor, hatalara daha az eğilimli –

+0

@RicardoSanchez yorumu bu soruya 10 dakika önce son öğeyi kaldıran 1 liner ile gönderildi. Bu yeterli değilse, belki de gereksiniminizi keskinleştirmek gerekiyor – Cruncher

+1

ListIterator() yönteminin içinde "-1" olmadan benim için son kod çalıştı: "myList.listIterator (myList.size());" "-1" ile interator sondan başlayarak en son öğeyi göz ardı ediyordu. – mizerablebr

1

, tıpkı senin olabilir:

arrayList.remove(arrayList.size()-1); 

kaldırmak isteseydi arkadan öne doğru tüm unsurları, for döngüsü kullanabiliriz: Dizi Listelerinde daha fazla bilgi edinmek için

for(int i = arraList.size()-1; i >= 0; i--) 
{ 
     arrayList.remove(i); 
} 

, buradan gidebilir: http://www.tutorialspoint.com/java/java_arraylist_class.htm

Hop e bu yardımcı olur.

7

İşte bunu yapmak için tek yoldur (nedeniniz neden ayrı bir sorudur):

import java.util.*; 

List<String> list = new ArrayList<String>(); 
list.add("a"); 
list.add("b"); 
list.add("c"); 

ListIterator<String> iter = list.listIterator(list.size()); 

while (iter.hasPrevious()) { 
    String s = iter.previous(); 
    System.out.println(s); 
} 
0
ArrayList aList = new ArrayList(); 
aList.add(1); 
aList.add(2); 
aList.add(3); 

Collections.reverse(aList); 

Iterator iter = aList.iterator(); 
while(iter.hasNext()){ 
    iter.next(); 
    iter.remove();//remove an element 
    break;//break from the loop or something else 
} 
+0

Bu, en başından sonuna kadar yinelenmiyor. Koleksiyonu tersine çevirir, ardından en baştan yineler. Sadece yıkıcı değil, aynı zamanda çok verimsiz. –

0
List<String> names = .... 
int count= names.getSize(); 
Iterator<String> i = names.iterator(); 
while (i.hasNext()) { 
    String s = i.next(); // must be called before you can call i.remove() 
    // Do something 
    if (count==1) 
     i.remove(); 
    count--; 
}