我可以继承“标准”arraylist迭代器吗?

时间:2013-04-14 13:48:00

标签: java arraylist iterator subclass

除了最后一个,我需要迭代ArrayList的所有元素。所以我想创建这样的迭代器。但我不知道要实现整个迭代器,我只需要覆盖hasNext()方法,所以我想继承一个“标准”迭代器。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:3)

我认为更好的方法是覆盖默认迭代器,而不是覆盖自己的ArrayListArrayList定义了一些可以帮助您完成任务的方法: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)

您可以创建一个实现IteratorListIterator接口的类,然后覆盖hasNext()方法。