我需要迭代ArrayList
除最後一個以外的所有元素。所以我想創建這樣的迭代器。但我不想實現整個迭代器,我只需要覆蓋hasNext()
方法,所以我想要繼承一個「標準」迭代器。有沒有辦法做到這一點?我可以繼承「標準」數組列表迭代器嗎?
1
A
回答
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
。
0
您可以創建一個類來實現Iterator
或ListIterator
接口,然後重寫hasNext()
方法。
3
我認爲更好的方法來做到這一點,而不是重寫默認的迭代器是自己迭代ArrayList
。 ArrayList
有幾個定義的方法可以幫助您完成任務:get(int)
和size()
。
您需要做的所有事情是獲取ArrayList
(與size()
)中的元素總數,然後使用get()
方法在每次迭代中直接遍歷訪問每個元素的元素。您的代碼會是這個樣子:
for(int i = 0; i < myList.size() - 1; i++){
element = myList.get(i);
//do something
}
現在有了這個原則記住,您可以創建自己的類以迭代ArrayList
。
相關問題
- 1. 迭代器繼承和繼承*這個
- 2. 迭代繼承類C++的列表
- 3. C++迭代器和繼承
- 4. cpp迭代器繼承
- 5. 我可以用組合來代替這個繼承嗎?
- 6. 我可以迭代數據源嗎?
- 7. 我們可以繼承NSOperationQueue嗎?
- 8. 可以繼承python @classmethod嗎?
- 9. YAML可以繼承嗎?
- 10. JFlex中可以繼承嗎?
- 11. Hibernate的標準列表迭代
- 12. 類可以從「參數」類繼承嗎? (有條件繼承)
- 13. 我可以在迭代時從列表中刪除嗎?
- 14. 你可以在數組上使用迭代器嗎?
- 15. 如果我的代碼不是「設計時間組件」,可以繼承WebClient嗎?
- 16. 我可以在數組中設置多個Codeigniter Where標準嗎?
- 17. 我可以通過添加數字來增加迭代器嗎?
- 18. 我可以繼承父控制器的變量嗎?
- 19. 我可以在struts2.0的jsp上的迭代器中使用迭代器嗎?
- 20. svn update:我可以迭代結果嗎?
- 21. 我可以迭代.NET4 MemoryCache嗎?
- 22. 我可以在後臺迭代嗎?
- 23. 我們可以使用繼承來實現鏈表嗎?
- 24. C#標準XmlSerializer和繼承
- 25. 標準佈局和繼承
- 26. 我可以以這種方式返回迭代器嗎?
- 27. 我可以添加到繼承函數嗎?
- 28. 繼承:我可以重寫基類數據成員嗎?
- 29. 我可以在Javascript中編寫「擴展」繼承函數嗎?
- 30. HTML標籤可以繼承父/封閉標籤的類嗎?
+1這就更簡單了 –