java - 如何使listiterator背靠背next()和previous()不返回相同的值?

标签 java list linked-list listiterator

此测试程序返回注释中的值 { 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/

相关文章:

java - 如何在链表中的某个索引处递归插入节点

java - 如何在 Android Studio 中以编程方式定位 ImageView

java - 插入已排序的双向链表

list - R:如何使用 R 从 txt 文件中获取信息

r - 如何提取数据框列表中的列名称?

python - 在 Python 中从列表中弹出元素的时间复杂度是多少?

algorithm - 间接寻址在此代码中如何工作?

c - 推送堆栈函数接收到我找不到的内存泄漏

java - 为什么在 Java 中使用 lambda 表达式?

java - 如何将 "Mon Jun 18 00:00:00 IST 2012"转换为 18/06/2012?