Iterator接口中的哪个方法可以删除以前返回的元素?

时间:2011-10-01 09:27:29

标签: java iterator

我在Goodrich的数据结构和算法中阅读了以下内容:

  

Java通过其java.util.Iterator接口提供了一个迭代器。我们   请注意java.util.Scanner类(第1.6节)实现了这一点   接口。此接口支持附加(可选)方法   从集合中删除以前返回的元素。这个   功能(通过迭代器删除元素)有点   然而,从面向对象的角度来看,这是有争议的   毫不奇怪,它的类实现是可选的

我不明白作者在这里指的是什么。这里讨论的方法是什么,它做了什么?

6 个答案:

答案 0 :(得分:3)

Iterator.remove(),删除next()previous()调用返回的最后一个节点(如果是ListIterator)

答案 1 :(得分:2)

Iterator Interface中,有一个remove()函数可以选择实现。文件说:

  

从底层集合中移除迭代器返回的最后一个元素(可选操作)。每次调用next时,只能调用一次此方法。如果在迭代正在进行的过程中修改基础集合而不是通过调用此方法,则迭代器的行为是未指定的。

基本上它会进入产生迭代器的集合,并从当前集合中删除当前迭代中的元素。

答案 2 :(得分:1)

可能是Iterator.remove()方法。

答案 3 :(得分:1)

有问题的方法是Iterator.remove(),它是Iterator interface的一部分。

很多Iterator实例都不支持它 - 如果你尝试在错误的迭代器上调用它,你很可能会得到UnsupportedOperationException

我个人认为,作为Iterator接口的一部分,remove()不是一个好主意:迭代器的主要概念目的是对集合的元素进行单次传递并按顺序返回这些元素。

如果你遵循“做一件好事”的设计学校,那么尝试使用迭代器作为修改这些集合的技术也是一个坏主意。从并发的角度来看,这种行为也会引起很大的麻烦......

答案 4 :(得分:1)

public interface Iterator
{

    public abstract boolean hasNext();

    public abstract Object next();

    public abstract void remove();
}

remove()方法是可选的,它将从Collection中删除next()返回的最后一个元素。

答案 5 :(得分:0)

remove()方法将删除最近从next()返回的元素。