当我使用下面的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) {
答案 0 :(得分:36)
一种方法是使用计数器:
ArrayList<Integer> list = new ArrayList<Integer>();
...
int size = list.size();
for (Integer i : list) {
...
if (--size == 0) {
// Last item.
...
}
}
修改的
无论如何,正如Tom Hawtin所说,当你需要获取当前索引信息时,使用for
循环或iterator
作为一切,有时最好使用“旧”语法你在使用Java5语法时获胜将在循环本身中丢失......
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...
}
}
答案 1 :(得分:9)
有时候使用迭代器会更好。
(据称,豪华for循环中索引请求的“85%”用于实现String
连接方法(您可以轻松实现)。)
答案 2 :(得分:4)
API不直接支持。您可以使用for(int i ..)循环和 count 元素或使用子列表(0,size - 1)并显式处理最后一个元素:
if(x.isEmpty()) return;
int last = x.size() - 1;
for(Integer i : x.subList(0, last)) out.println(i);
out.println("last " + x.get(last));
仅在不引入冗余时才有用。它比计数版本更好(在子列表开销分摊后)。 (以防你无论如何都要关注拳击)。
答案 3 :(得分:3)
另一种方法是,您可以使用传递对象捕获最后一个值,然后使用它执行某些操作:
List<Integer> list = new ArrayList<Integer>();
Integer lastValue = null;
for (Integer i : list) {
// do stuff
lastValue = i;
}
// do stuff with last value