为什么javaapi阻止我们一起调用add和remove?

为什么javaapi阻止我们一起调用add和remove?,java,list,collections,listiterator,Java,List,Collections,Listiterator,根据Java API- IllegalStateException-如果未调用next或previous,或者在上次调用next或previous之后调用了remove或add remove()-从列表中删除next()或previous()返回的最后一个元素(可选操作)。每次呼叫下一个或上一个时,只能进行一次此呼叫。只有在最后一次调用next或previous后未调用add(E)时,才能执行此操作 因为每次我们一起调用add和remove时,它都应该删除add添加的最后一个元素,为什么会导致I

根据
Java API
-

IllegalStateException-如果未调用next或previous,或者在上次调用next或previous之后调用了remove或add

remove()
-从列表中删除next()或previous()返回的最后一个元素(可选操作)。每次呼叫下一个或上一个时,只能进行一次此呼叫。只有在最后一次调用next或previous后未调用add(E)时,才能执行此操作

因为每次我们一起调用
add
remove
时,它都应该删除
add
添加的最后一个元素,为什么会导致
IllegalStateException

例如,在我的代码中-

  • 每次调用
    next()
    之前的
    remove()
  • 另外,如果不调用
    next()
那么为什么在一起调用
add
remove
时会出现
java.lang.IllegalStateException

我的java代码是-

ListIterator<String> listIterator=list.listIterator();
    while(listIterator.hasNext()){
        System.out.println(listIterator.next());
        listIterator.add("Intel");
        listIterator.remove();
        //listIterator.remove();
    } 
ListIterator ListIterator=list.ListIterator();
while(listIterator.hasNext()){
System.out.println(listIterator.next());
添加(“英特尔”);
remove();
//remove();
} 
调用
next()之后,
迭代器位于下一个元素

当我们通过
add()添加元素时,
迭代器在最后添加的元素处向前移动


那么为什么在调用Oracle文档中的
remove()

时会出现
java.lang.IllegalStateException

从列表中删除next()或返回的最后一个元素 previous()(可选操作)。每次只能打一次电话 呼叫下一个或上一个。只有在未添加(E)的情况下才能进行此操作 在上次调用下一个或上一个后调用


我不知道为什么它是被禁止的,但正如你已经知道的,javadoc明确禁止这样做

然而问题是你为什么想做那样的事?我想到的唯一一件事是您想要替换当前元素(即删除并添加而不是它)。但是,您可以使用
set
。见:

将next()或previous()返回的最后一个元素替换为 指定的元素(可选操作)。只有在以下情况下才能拨打此电话: 上次调用后,未调用remove()和add(E) 下一个或上一个


您阅读了错误的文档:您应该阅读

它说:

抛出:

IllegalStateException-如果没有调用next或previous,或者在上次调用next或previous之后调用了删除或添加

现在,如果你想要一个理由,很简单。你在玩游标


添加
删除
之后,光标在哪里?你有点不确定。这是一个很难回答的问题,因此最好通过抛出异常来显示不确定性。为了了解它,您必须调用
hasNext
hasneproval
,这将再次执行所有计算。

您能描述一下您在哪种情况下受到“限制”吗?什么是你无法实现的?如果你真的需要,你可以调用
remove
add
。我的意思是限制不是我们无法实现任何事情,我谈论特定场景只是出于好奇。这正是我的问题,这是什么
不确定性
状态?它是指光标无法放置在任何位置,因为它不知道您希望位于添加的元素之前、添加的元素之后还是初始元素之后。删除也一样,但选择较少。因此,要消除这种不确定性,请重新调用
hasPrevious
/
hasNext