【问题标题】:List Iterator previous is not working in Java [duplicate]以前的列表迭代器在 Java 中不起作用 [重复]
【发布时间】:2020-10-18 10:22:19
【问题描述】:

我不确定是什么原因导致了这个问题,但是这似乎很奇怪,因为我没有得到预期的结果。

 datesMap.addAll(yearSubColumn.keySet()); // 有两个值:
                                            // 2018-11-11 22:17:32+00:00,
                                            // 2019-04-08 17:53:59+00:00
   ListIterator datesMapIterator = datesMap.listIterator();
   while (datesMapIterator.hasNext()) {
       整体强度 = 0.0f;
       firstDate = datesMapIterator.next();
       String secondDate = datesMapIterator.next();
       System.out.println("SECOND" + secondDate);
       字符串 prevDat = datesMapIterator.previous();
       System.out.println("Prev" + prevDat);
       System.exit(0)
   }

输出:SECOND2019-04-08 17:53:59+00:00 Prev2019-04-08 17:53:59+00:00

为什么我在 PrevDat 中没有收到 2018-11-11 22:17:32+00:00。数据结构有什么问题吗? 在这方面的任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: java list iterator


    【解决方案1】:

    请参阅ListIteratorhere 上的文档。

    在您的情况下,您的列表类似于["2018", "2019"](为简洁起见)。

    当你第一次创建迭代器时,它的“光标”定位为:

       2018   2019
     ^
    cursor
    

    根据文档,这意味着next 将返回“2018”(即firstDate 是“2018”)。

    调用next ONCE 后,迭代器处于如下状态:

       2018   2019
            ^
         cursor
    

    现在,您再次致电next(以获取secondDate)。 next 返回“2019”(因为它是光标之后的下一件事)。调用后,状态为:

       2018   2019
                   ^
                cursor
    

    此时,调用previous,它返回光标之前的元素。从上图中可以看出,该值将是“2019”,这是您的代码打印的内容。调用previous后,你又会是这个状态:

       2018   2019
            ^
          cursor
    

    简而言之,previous 将返回 next 刚刚返回的内容并将光标向后移动一个位置。

    【讨论】:

    • 您能建议任何更好的方法来达到以前的迭代值吗?
    • 你已经有了,它存储在firstDate :)
    【解决方案2】:

    根据ListIteratornext 的文档

    返回列表中的下一个元素并前进光标位置。可以重复调用此方法以遍历列表,或与调用 previous 混合以来回移动。 (注意交替调用 next 和 previous 将重复返回相同的元素。

    由于您在第一个元素上执行下一个,因此指针到达第二个,现在如果您执行上一个,它只会回到第二个。

    【讨论】:

      【解决方案3】:

      如果你阅读文档,即previous()的javadoc,你会发现:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-08
        • 2018-04-26
        • 2012-03-23
        • 2023-03-23
        • 1970-01-01
        • 2016-06-03
        • 1970-01-01
        • 2012-11-05
        相关资源
        最近更新 更多