除了最后一个元素,我需要迭代ArrayList的所有元素。所以我想创建这样的迭代器。但是我没有什么实现整个迭代器的方法,我只需要覆盖hasNext()方法,所以我想将“标准”迭代器作为子类。有什么办法吗?

最佳答案

修改迭代器以执行此遍历是很奇怪的。显而易见的事情是根据需要编写“算法”:

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

关于java - 我可以继承“标准” arraylist迭代器吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15999765/

10-13 09:11