是否可以使用ListIterator迭代Java中的LL,定期向列表添加对象,并按照添加顺序处理列表中的这些项目?
假设我从一个带有单个对象的LL开始。我处理这个对象,并决定我想添加两个额外的对象,我想进一步处理(如FIFO)。直觉上,我用
开始这个过程while (itr.hasNext()) {
itr.next();
...
itr.add();
}
但是,这似乎很快崩溃了 - 实际上添加实际上是在我当前所处的索引之前添加项目,而不是在(ListIterator javadoc之后)。这意味着当我再次点击while循环开始时,它实际上无法识别是否已将内容添加到LL中,因为它实际上需要使用BACKWARDS(.hasPrevious()
而不是.hasNext()
)来查找它。但我不能用.hasPrevious()
(我不认为)启动LL,因为LL中的第一项是.next()
项。
如何干净利落地做到这一点?或者我只是愚蠢?
答案 0 :(得分:1)
您没有引用上述评论中的整个定义:
将指定的元素插入到 列表(可选操作)。元素 插入之前 将返回的下一个元素 接下来,如果有的话,在下一个之后 将返回的元素 以前,如果有的话。 (如果清单 不包含元素,新元素 成为名单上唯一的元素。) 新元素插入之前 隐式游标:后续调用 接下来将不受影响,并且a 随后打电话给以前会 返回新元素。 (这个电话 将值增加1 通过调用nextIndex或者返回 previousIndex)。的
插入新项目,以便您必须调用previous()才能获得它。
如果你必须在当前的迭代点插入项目,那么你必须自己进行管理并调用previous(),这将涉及稍微重构循环。
如果您可以将新项目添加到列表末尾并在以后处理它们,请改用队列实现。
答案 1 :(得分:0)
如果您不打算在循环中进行任何删除,则可以在循环体末端每次调用previous()
时调用add()
一次。这会将光标留在第一个添加的项之前,然后在下一次迭代时由next()
返回。我不得不说,我觉得必须有更好的方法来进行这种处理。
答案 2 :(得分:-1)
我相信你必须分开添加到列表并迭代它。