2013-10-07 62 views
6

我想知道是否有可能從最後一個迭代到ArrayList中的第一個元素,如果是這樣的話?究其原因是因爲我需要刪除添加到列表中的最後一個元素如何迭代從最後到第一個ArrayList?

+3

你爲什麼不只是'list.remove(則爲list.size() - 1)'? –

+1

如何查看List的api文檔。在文檔中尋找「迭代器」應該有所幫助。 –

+0

公平,但我問的原因是因爲我有使用foreach的問題,並改變我的代碼使用while和hasNext Iterator組合,所以我想改變我的代碼更穩健的東西,如果這是有道理的 –

回答

16

雖然你可以使用索引,這樣

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

總是重複你ArrayList你會過得更好使用刪除項目的目的ListIterator<T>ArrayList

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

名單迭代器也可用於向後迭代列表 - 如下所示:

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

迭代器的初始索引應該等於最後一個元素+1的索引。如docs所示:「對previous的初始調用將返回指定索引減1的元素。

+0

但是這個選項不是從頭到尾嗎?我需要以儘可能最好的方式將元素從最後移到第一個,不太容易出錯 –

+0

@RicardoSanchez評論發佈時間:10分鐘之前對此問題進行了修改,刪除了最後一個元素。如果這還不夠,也許你需要提高你的要求 – Cruncher

+1

最後一段代碼在listIterator()方法中沒有「-1」的情況下工作:「myList.listIterator(myList.size());」 隨着「-1」的意思是忽略最新的項目,從倒數第二個開始。 – mizerablebr

1

如果您只是需要刪除一個數組列表的最後一個元素,你可能只是做:

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

如果你想刪除從後到前的所有元素,你可以用這個循環:在數組列表

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

要了解詳情,您可以去這裏:http://www.tutorialspoint.com/java/java_arraylist_class.htm

合這有助於。

7

下面是做這件事(你之所以是一個單獨的問題):

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

這不會從頭到尾迭代。它顛倒了集合,然後從頭開始迭代。它不僅具有破壞性,而且非常低效。 –

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--; 
} 
相關問題