除了最后一个,我需要迭代ArrayList
的所有元素。所以我想创建这样的迭代器。但我不知道要实现整个迭代器,我只需要覆盖hasNext()
方法,所以我想继承一个“标准”迭代器。有没有办法做到这一点?
答案 0 :(得分: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 :(得分:1)
修改迭代器以执行此遍历会很奇怪。显而易见的事情就是根据需要编写“算法”:
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();
}
}
(或使用假设RandomAccess
列表的索引。)
然而,有一个更好的方法来做到这一点。 list.subList(0, list.size()-1)
(对于非空列表)将返回原始列表的视图,而不是最后一个元素。它不会复制,您甚至可以使用Iterator.remove
。
答案 2 :(得分:0)
您可以创建一个实现Iterator
或ListIterator
接口的类,然后覆盖hasNext()
方法。