此测试程序返回注释中的值 { 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?
}
}
最佳答案
使用您的符号,当您第一次调用 BFI.next() 时,光标的位置是:
*1^2*3*4*
这会返回 1,因为光标在向前移动时经过了 1。下次调用 BFI.next() 后,光标的位置为:
*1*2^3*4*
因此,当您调用 BFI.previous() 时,光标向后移动 1,越过并返回 2,从而导致以下位置:
*1^2*3*4*
这是 LinkedListIterator 的正确行为。调用 next() 然后立即调用 previous() 应该始终返回相同的值,因为您正在迭代相同的元素。
关于java - 如何使listiterator背靠背next()和previous()不返回相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43282746/