Java Iterator.hasNext()对于列表中的最后一项似乎不返回false

Java Iterator.hasNext()对于列表中的最后一项似乎不返回false,java,list,if-statement,iterator,Java,List,If Statement,Iterator,我在for循环中有一个if-else函数,循环遍历列表。当我到达这个列表的最后一个元素时,我希望它采取行动,但它似乎不起作用。以下是我的代码概要: for(Item t: itemList){ if(....){ } else if(....){ } else if(currentStartTime>previousFinishTime){ System.out.println("C"); if

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

谢谢

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

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

for(Iterator<Item> iter = itemList.iterator(); iter.hasNext(); ) {
    Item item = iter.next();
    if(iter.hasNext()) {
    }
}
for(迭代器iter=itemList.Iterator();iter.hasNext();){
Item=iter.next();
if(iter.hasNext()){
}
}
但是95%的时候,您应该能够在循环之后而不是在最后一次迭代中做任何您想做的事情

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

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

for(Iterator<Item> iter = itemList.iterator(); iter.hasNext(); ) {
    Item item = iter.next();
    if(iter.hasNext()) {
    }
}
for(迭代器iter=itemList.Iterator();iter.hasNext();){
Item=iter.next();
if(iter.hasNext()){
}
}
但在95%的时间里,您应该能够在循环之后而不是在上一次迭代期间执行任何您想执行的操作。

使用“增强的for”,您无法访问为
for
操作创建的操作符

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

以及“增强的for”,您无法访问为
for
操作创建的运算符


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

迭代器通常不会指向列表中的任何项目(没有
current()
方法),如果有新的迭代器,可以认为它位于第一个项目之前你的意思是
iter.hasNext()
?迭代器通常不会指向列表中的任何项目(没有
current()
方法),如果有新的迭代器,可以认为它位于第一个项目之前。当你说
i.nasNext()
时,你的意思是
iter.hasNext()