【问题标题】:Iterator.hasNext() does not appear to return false on the last item in a ListIterator.hasNext() 似乎不会对 List 中的最后一项返回 false
【发布时间】:2014-04-11 07:13:13
【问题描述】:

我在 for 循环中有一个 if-else 函数,它遍历一个列表。当我到达此列表的最后一个元素时,我希望它采取行动,但它似乎不起作用。这是我的代码大纲:

for(Item t: itemList){
    if(....){
         }
    else if(....){
         }
    else if(currentStartTime>previousFinishTime){
         System.out.println("C");
         if(itemList.iterator().hasNext()==false){
                System.out.println("end of array");
                EFTs.add(EFT);}  
    else{.....;}
      }

当我使用列表中的最后一项触发此条件时(即最后一项具有 currentStartTime>previousFinishTime,我知道这是正确的,因为它打印 C),我的 if 条件中没有任何内容触发。我是否误解了 hasNext() 函数的用途?

谢谢

【问题讨论】:

    标签: java list if-statement iterator


    【解决方案1】:
    itemList.iterator().hasNext()==false
    

    itemList.iterator() 指的是一个全新的迭代器。它不是指在 for 循环中使用的迭代器。 itemList.iterator() 实际上总是从列表的开头开始,因此 hasNext() 会告诉你列表是否为空。

    要使用这样的迭代器,您需要创建自己的循环,例如:

    for(Iterator<Item> iter = itemList.iterator(); iter.hasNext(); ) {
        Item item = iter.next();
        if(iter.hasNext()) {
        }
    }
    

    但在 95% 的情况下,您应该能够在循环之后而不是在最后一次迭代期间做任何您想做的事情。

    【讨论】:

    • 迭代器通常不指向列表中的任何项目(没有current() 方法),并且可以考虑将新的迭代器定位在 ahead第一项,如果有的话。
    • 当你说i.nasNext()是指iter.hasNext()
    【解决方案2】:

    使用“enhanced for”,您无法访问为for 操作创建的运算符。

    您所做的是每次都创建一个新的运算符,因此它指向列表的开头。显然,除非是空列表,否则会为hasNext()返回true

    【讨论】:

      猜你喜欢
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      • 2019-11-05
      • 1970-01-01
      相关资源
      最近更新 更多