簡體   English   中英

Iterator.hasNext()在列表中的最后一項上似乎未返回false

[英]Iterator.hasNext() does not appear to return false on the last item in a List

我在循環遍歷列表的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 ),如果條件條件觸發,則沒有任何結果。 我是否誤解了hasNext()函數的用途?

謝謝

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%的時間,您應該能夠在循環之后而不是在上一次迭代期間執行所需的任何操作。

使用“增強的”,您將無法訪問為for操作創建的操作員。

您正在做的是每次創建一個新的運算符,因此它指向列表的開頭。 顯然,除非它是一個空列表,否則它將為hasNext()返回true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM