Iterator.hasNext()似乎没有在List中的最后一项上返回false

时间:2014-04-11 07:13:14

标签: java list if-statement iterator

我在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()函数的用途?

由于

2 个答案:

答案 0 :(得分:4)

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%的情况下,你应该能够在循环之后而不是在最后一次迭代期间做任何你想做的事。

答案 1 :(得分:0)

使用&#34;增强&#34;,您无法访问为for操作创建的运算符。

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