为什么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
。