Java ListIterator 中的哪个元素被认为是先前的?
Posted
技术标签:
【中文标题】Java ListIterator 中的哪个元素被认为是先前的?【英文标题】:Java which element in the ListIterator is considered previous? 【发布时间】:2014-07-02 19:56:05 【问题描述】:我目前正在尝试学习如何实现我自己的 ListIterators。我已经实现了大部分并准备好了,除了我对 previous() 方法感到困惑。按照标准约定,我能否解释一下 previous() 通常是如何解释的。
即:
>cursor<
dog cat fish bird frog snake
根据 Oracles Java Platform 7 API:
E 前一个()
返回列表中的前一个元素并将光标位置向后移动。可以重复调用此方法以向后迭代列表,或与调用 next() 混合以来回移动。 (注意,交替调用 next 和 previous 将重复返回相同的元素。)
我不太明白的是,如果调用 previous(),它会返回 'fish' 还是 'cat'。
我从两个方面理解它:
1) 'fish' 是您之前所在的对象
2) 'cat' 是在数字上在 'fish' 索引之前的索引处的对象
如果previous返回'fish',那么remove()是否真的删除了相同的元素而不管遍历的方向?
【问题讨论】:
【参考方案1】:最容易将光标想象为在两个元素之间。所以一开始,它是 before dog
。调用next()
返回dog
,并将其移动到dog
和cat
之间,等等。当光标在 snake
之后,您已经完成了迭代。
所以next()
总是返回光标后的值,并将光标移动到之后的位置。 previous()
总是返回光标之前的值,并将光标移动到之前的位置。
编辑:正如大卫康拉德在 cmets 中所指出的:remove()
总是删除next()
或previous()
返回的最后一个值。就我上面解释的方式而言,这可能是最不明显的部分......使用您描述的那种“on item”光标来模拟这种行为要容易得多。
【讨论】:
而remove()
总是删除next()
或previous()
返回的最后一个值,以回答问题最后一句中提出的问题。
哇。这是一个非常简单易懂的答案。非常感谢。
@DavidConrad:谢谢,我错过了这一点。会加进去的。【参考方案2】:
ListIterator
很棘手,因为指针的定义有点不同。
Java 7 文档说:
ListIterator 没有当前元素;它的光标位置始终位于调用 previous() 将返回的元素与调用 next() 将返回的元素之间。
可能的光标位置是(用星号表示):
* * * * * * *
dog cat fish bird frog snake
next
函数将光标前移一位并返回以下元素之间的元素:
BEFORE:
* * v * * * *
dog cat fish bird frog snake
AFTER:
* * * v * * *
dog cat FISH bird frog snake
RETURNED: fish
previous
函数会将光标向后移动并返回以下元素:
BEFORE:
* * * * * v *
dog cat fish bird frog snake
AFTER:
* * * * v * *
dog cat fish bird FROG snake
RETURNED: frog
【讨论】:
以上是关于Java ListIterator 中的哪个元素被认为是先前的?的主要内容,如果未能解决你的问题,请参考以下文章