2013-10-07 8 views
6

Ich frage mich, ob es möglich ist, vom letzten bis zum ersten Element in einer ArrayList zu iterieren, wenn ja wie? Der Grund ist, weil ich das letzte Element der Liste hinzugefügt, entferntWie man von der letzten zur ersten ArrayListe iteriert?

+3

Warum gehst du nicht nur 'list.remove (list.size() - 1) '? –

+1

Wie sieht es mit Lists API-Dokumentation aus? Suchen nach "Iterator" im Dokument sollte helfen. –

+0

Fair, aber der Grund, warum ich frage, ist, weil ich Probleme mit foreach hatte und meinen Code ändern, um while und hasNext Iterator combo zu verwenden, also wollte ich meinen Code in etwas robuster ändern, wenn das Sinn macht –

Antwort

16

Während Sie können jederzeit Ihre ArrayList iterieren einen Index, wie dieser

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

würden Sie besser dran mit einem ListIterator<T> zum Zwecke der Löschen von Nachrichten aus ArrayList verwenden sein:

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

Liste Iteratoren können verwendet werden, um Ihre Liste auch rückwärts zu durchlaufen - wie folgt:

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

Der Anfangsindex des Iterators sollte gleich dem Index des letzten Elements + 1 sein. Als docs sagen Sie: "Ein erster Aufruf an previous würde das Element mit dem angegebenen Index minus eins zurückgeben."

+0

Aber geht diese Option nicht von Anfang bis Ende? Ich muss die Elemente von der letzten zum ersten auf die bestmögliche Weise entfernen, weniger anfällig für Fehler –

+0

@RicardoSanchez Kommentar wurde vor 10 Minuten zu dieser Frage mit einem 1-Liner, der das letzte Element entfernt veröffentlicht. Wenn das nicht genug ist, müssen Sie vielleicht Ihre Anforderung schärfen – Cruncher

+1

Der letzte Code arbeitete für mich ohne die "-1" innerhalb der listIterator() -Methode: "myList.listIterator (myList.size());" Mit der "-1" ignorierte der Interator den letzten Punkt, beginnend mit dem vorletzten. – mizerablebr

1

Wenn Sie müssen nur das letzte Element eines Arrays Liste entfernen, man konnte einfach tun:

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

Wenn Sie entfernen wollten alle Elemente von hinten nach vorne, können Sie diese für Schleife verwenden:

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

weitere Infomationen auf Array-Listen, können Sie hier gehen: http://www.tutorialspoint.com/java/java_arraylist_class.htm

Hop Das hilft.

7

Hier ist eine Möglichkeit, es zu tun (Ihr Grund, warum ist eine andere Frage):

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

Das iteriert nicht vom Ende bis zum Anfang. Sie kehrt die Sammlung um und iteriert von Anfang an. Es ist nicht nur destruktiv, sondern auch sehr ineffizient. –

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--; 
} 
Verwandte Themen