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 gerekirsecevap
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."
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 –
@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
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
, 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.
İş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);
}
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
}
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. –
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--;
}
Neden) (değil sadece 'list.remove (list.size do - 1) '? –
Listenin api belgelerine bakmaya ne dersin. Doktorda "yineleyici" aranması yardımcı olmalıdır. –
Adil ama bu Sen içeriklerini değiştiremez –