Java中ListIterator中的哪个元素以前被认为是?

时间:2014-07-02 19:56:06

标签: java iterator listiterator

我目前正在尝试学习如何实现自己的ListIterators。除了我对previous()方法感到困惑之外,我已经实现了大部分并准备好了。按照标准惯例,我可以解释一下通常如何解释previous()。

即:

             >cursor<
dog     cat    fish     bird     frog    snake

根据Oracles Java Platform 7 API:

E previous()

返回列表中的上一个元素并向后移动光标位置。可以重复调用此方法以向后遍历列表,或者与调用next()混合以来回传递。 (请注意,对next和previous的交替调用将重复返回相同的元素。)

我不太明白,如果调用previous(),它会返回'fish'或'cat'。

我以两种方式理解它:

1)'fish'是你之前的对象

2)'cat'是数字上在'fish'索引之前的索引处的对象

如果之前返回'fish',那么remove()实际上是否删除相同的元素而不管遍历的方向?

2 个答案:

答案 0 :(得分:5)

最简单的想法是将光标视为两个元素之间的。所以一开始,它是 dog之前的。致电next()会返回dog,并将其移至dogcat之间等。当之后光标时,您已完成迭代> snake

所以next()总是返回光标后的值,然后将光标移动到之后的位置。 previous()始终在光标之前返回值,并将光标移动到之前的位置。

编辑:正如David Conrad在评论中所指出的那样:remove()始终会删除next()previous()返回的最后一个值。这可能是最不明显的部分,当涉及到我上面解释过的方式时......使用&#34; on item&#来模拟这种行为要容易得多34;光标你已经描述过了。

答案 1 :(得分:1)

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