Java 为什么迭代器.remove()被描述为可选操作?

Java 为什么迭代器.remove()被描述为可选操作?,java,iterator,Java,Iterator,我浏览了Iterator.remove()的文档( 其中删除()描述为 void remove() 从基础集合中删除最后返回的元素 通过迭代器(可选操作)。 此方法只能调用一次 每次呼叫下一个。一个人的行为 如果 基础集合已修改 当迭代在中进行时 除了打这个电话以外,还有别的办法吗 方法 那么,谁能说出“可选”是什么意思呢 这会影响操作的健壮性吗?(像C++一样,它不能保证操作的健壮性) 为什么这里明确指定了“可选” 第二行文档中的“修改”是什么意思 如果修改了基础集合,则未指定迭代器的行为

我浏览了Iterator.remove()的文档( 其中
删除(
)描述为

void remove()
从基础集合中删除最后返回的元素 通过迭代器(可选操作)。 此方法只能调用一次 每次呼叫下一个。一个人的行为 如果 基础集合已修改 当迭代在中进行时 除了打这个电话以外,还有别的办法吗 方法

  • 那么,谁能说出“可选”是什么意思呢
  • 这会影响操作的健壮性吗?(像C++一样,它不能保证操作的健壮性)
  • 为什么这里明确指定了“可选”
  • 第二行文档中的“修改”是什么意思
  • 如果修改了基础集合,则未指定迭代器的行为

    #1:可选意味着您可以实现它抛出一个
    不支持操作异常

    #2:这个操作是可选的,因为有时候你只是不想修改迭代器的内容。或者你对“操作的健壮性”有什么理解

    编辑#4:
    如果修改了基础集合,则迭代器的行为未指定

    通常,通过执行

    List<String> c = new ArrayList<String>();
    c.add("Item 1");
    c.add("Item 2");
    c.add("Item 3");
    ...
    for (Iterator<String> i = c.iterator(); i.hasNext();)
    {
      String s = i.next();
      ...
    }
    
    这是不干净的,可能会损坏列表/集合中的数据。。。应该避免。相反,通过迭代器删除()项

    i.remove();
    

    它被描述为可选的,因为并不是所有可以提供迭代器的集合类都在它们返回的迭代器中实现
    remove()
    方法。如果返回的迭代器没有实现它,将抛出一个
    UnsupportedOperationException


    普通的
    java.util.ArrayList
    java.util.LinkedList
    和其他标准集合类都在迭代器中实现了
    remove()
    方法,因此您可以安全地使用它。

    首先
    java.util.Iterator
    是一个接口,即实现此接口的类如何与世界其他地方交互的协议。如何实施interaface的方法是他们的责任

    如果基础数据结构不允许删除,则
    remove()
    将抛出
    不支持操作异常。例如,如果您正在遍历从DB检索的结果集,则不实现此方法是有意义的


    如果您迭代并发线程之间共享的某个集合,而另一个线程修改了数据迭代线程,则将返回不确定的结果。

    但事实是,每个实现方法都允许删除?@Boris:thanx进行解释。您能描述4个问题吗?@Atmocreation:thanx用于解释,你能描述一下这4个问题吗?所以问题是:为什么它首先出现在接口中?@reinierpost我想是为了方便,因为很多实现都会实现这个方法。当你设计软件时,总是要做一些权衡,例如在理论上的“正确性”和实用性之间,复杂的设计永远不会是“完美的”。
    i.remove();