我需要迭代ArrayList
除最后一个之外的所有元素。所以我想创建这样的迭代器。但是我没有实现整个迭代器,我只需要重写hasNext()
方法,所以我想继承一个“标准”迭代器。有没有办法做到这一点?
问问题
621 次
3 回答
3
我认为比覆盖默认迭代器更好的方法是自己迭代ArrayList
。AnArrayList
定义了几个方法可以帮助您完成任务:get(int)
和size()
.
您所要做的就是获取ArrayList
(with size()
) 中的元素总数,然后使用该get()
方法在每次迭代中直接访问每个元素的元素循环。您的代码将如下所示:
for(int i = 0; i < myList.size() - 1; i++){
element = myList.get(i);
//do something
}
现在牢记这一原则,您可以创建自己的类来迭代ArrayList
.
于 2013-04-14T13:58:49.893 回答
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
.
于 2013-04-14T14:33:31.707 回答
0
您可以创建一个实现Iterator
或ListIterator
接口的类,然后覆盖该hasNext()
方法。
于 2013-04-14T13:52:47.443 回答