此测试程序返回评论{ 1, 2, 2, 3, 3 }
中的值,但我想更改它,以便我收到{ 1, 2, 1, 2, 3, 2 }
。
我发现,listIterator是这样的,因为光标位于这两个值之间:
^1*2*3*4*
星号*
是光标所在的位置,^
是当前的位置。怎么改呢?
public class LinkedListIteratorTest {
public static void main(String[] args) {
LinkedList<Integer> backForw = new LinkedList<Integer>();
ListIterator<Integer> bFI;
backForw.add(1);
backForw.add(2);
backForw.add(3);
backForw.add(4);
bFI = backForw.listIterator();
System.out.println(bFI.next()); // 1
System.out.println(bFI.next()); // 2
System.out.println(bFI.previous()); // 2, how to make it return 1?
System.out.println(bFI.next()); // 2, if the last one would be 1, this
// should be 2.
System.out.println(bFI.next()); // 3
System.out.println(bFI.previous()); // 3, how to make it return 2?
}
}
答案 0 :(得分:1)
使用您的符号,当您第一次调用BFI.next()时,光标的位置为:
* 1 ^ 2 * 3 * 4 *
这会返回一个因为光标在向前移动时经过一个光标。在下次调用BFI.next()之后,光标的位置为:
* 1 * 2 ^ 3 * 4 *
结果,当你调用BFI.previous()时,光标向后移动一步,经过并返回2并产生以下位置:
* 1 ^ 2 * 3 * 4 *
这是LinkedListIterator的正确行为。调用next()然后立即调用previous()应该总是返回相同的值,因为你在迭代同一个元素。
答案 1 :(得分:0)
你做不到。
从概念上讲,Java迭代器的定义是它指向元素之间的空间。当你向前或向后移动迭代器时,它会遍历一个元素并返回该元素,在返回的元素和下一个(或前一个)元素之间停留。
您可以创建自定义迭代器,但任何其他行为都会导致不一致。在沿着这条路走下去之前,问问自己为什么你希望迭代器的行为不同,以及你是否可以调整你的代码来使用当前定义的迭代器。