Java foreach loop: for (Integer i : list) { ... }

2022-09-02 05:28:27

当我使用JDK5时,如下所示

ArrayList<Integer> list = new ArrayList<Integer>();  
     for (Integer i : list) { 

      //cannot check if already reached last item

   }

另一方面,如果我只是使用Iterator

ArrayList<Integer> list = new ArrayList<Integer>();
  for (Iterator i = list.iterator(); i.hasNext();) {

          //i can check whether this is last item
          if(i.hasNextItem()){
          }

    }

如何检查我是否已经到达最后一项for (Integer i : list) {


答案 1

一种方法是使用计数器:

ArrayList<Integer> list = new ArrayList<Integer>();
...
int size = list.size();
for (Integer i : list) { 
    ...
    if (--size == 0) {
        // Last item.
        ...
    }
}

编辑

无论如何,正如 Tom Hawtin 所说,当您需要通过使用循环或 the 获取当前索引信息时,有时最好使用“旧”语法,因为您在使用 Java5 语法时赢得的所有内容都将在循环本身中丢失...foriterator

for (int i = 0; i < list.size(); i++) {
    ...

    if (i == (list.size() - 1)) {
        // Last item...
    }
}

for (Iterator it = list.iterator(); it.hasNext(); ) {
    ...

    if (!it.hasNext()) {
        // Last item...
    }
}

答案 2

有时最好使用迭代器。

(据称,在 posh for 循环中,“85%”的索引请求是用于实现连接方法(您可以轻松地做到这一点)。String