2013-04-14 32 views
1

我需要迭代ArrayList除最後一個以外的所有元素。所以我想創建這樣的迭代器。但我不想實現整個迭代器,我只需要覆蓋hasNext()方法,所以我想要繼承一個「標準」迭代器。有沒有辦法做到這一點?我可以繼承「標準」數組列表迭代器嗎?

回答

1

修改迭代器執行此遍歷將會很奇怪。最明顯的事情是寫的「算法」,只要你想它:(或者使用索引假設RandomAccess列表)

public static <T> void eachExceptLast(List<? extends T> list, Operation<T> op) { 
    Iterator<T> iter = list.iterator(); 
    if (!iter.hasNext()) { 
     return; 
    } 
    T item = iter.next(); 
    while (iter.hasNext()) { 
     op.run(item); 
     item = iter.next(); 
    } 
} 

然而,有這樣做的更好的方法。 list.subList(0, list.size()-1)(對於非空列表)將返回原始列表而不是最後一個元素的視圖。它不會做副本,甚至可以使用Iterator.remove

3

我認爲更好的方法來做到這一點,而不是重寫默認的迭代器是自己迭代ArrayListArrayList有幾個定義的方法可以幫助您完成任務:get(int)size()
您需要做的所有事情是獲取ArrayList(與size())中的元素總數,然後使用get()方法在每次迭代中直接遍歷訪問每個元素的元素。您的代碼會是這個樣子:

for(int i = 0; i < myList.size() - 1; i++){ 
     element = myList.get(i); 
     //do something 
    } 

現在有了這個原則記住,您可以創建自己的類以迭代ArrayList

+0

+1這就更簡單了 –