-1

根据Java API-

IllegalStateException - 如果在最后一次调用 next 或 previous 之后既没有调用 next 也没有调用 previous,或者 remove 或 add 没有被调用

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

因为每次我们一起调用时addremove它都应该删除最后一个添加的元素,add原因是这个原因IllegalStateException

例如在我的代码中-

  • next()之前每次打电话remove()
  • remove()不会被调用两次而不调用next()

那么为什么有java.lang.IllegalStateException关于召唤addremove在一起。

我的Java代码是-

ListIterator<String> listIterator=list.listIterator();
    while(listIterator.hasNext()){
        System.out.println(listIterator.next());
        listIterator.add("Intel");
        listIterator.remove();
        //listIterator.remove();
    } 

在调用next()迭代器之后是在下一个元素。

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

那为什么要java.lang.IllegalStateException打电话remove()

4

3 回答 3

1

您正在阅读错误的文档:您应该阅读ListIterator's javadoc

它说:

抛出:

...

IllegalStateException - 如果在最后一次调用 next 或 previous 之后既没有调用 next 也没有调用 previous,或者remove 或 add没有被调用

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

在 aadd或 a 之后remove,您的光标在哪里?你是在不确定的情况下。这是一个很难回答的问题,所以最好通过抛出异常来表明不确定性。为了知道它,您必须调用hasNextor hasPreviouswhich 将再次执行所有计算。

于 2015-06-22T09:30:47.650 回答
0

来自 Oracle 文档:

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

于 2015-06-22T08:43:33.617 回答
0

好吧,我不知道为什么它被禁止,但正如您已经知道的那样,javadoc 明确禁止这样做。

然而问题是你为什么要做这样的事情?我唯一想到的是你想替换当前元素(即删除并添加而不是它)。但是,您可以set改用。请参阅javadoc

将 next() 或 previous() 返回的最后一个元素替换为指定元素(可选操作)。只有在最后一次调用 next 或 previous 之后既没有调用 remove() 也没有调用 add(E) 时,才能进行此调用。

于 2015-06-22T09:16:14.313 回答