我有一个以下的循环
ArrayList<User> userList;
for(User user:userList){
....
}
如何获取即将使用的当前obj的索引?
我可以改变它常规的for(int i...)
循环,但这会产生反作用。
感谢。
答案 0 :(得分:3)
如果你想使用索引,那么使用for(int i...)
是完全合理的。
答案 1 :(得分:3)
你必须像这样使用你自己的计数器
int counter = 0;
ArrayList<User> userList;
for(User user:userList){
....
counter++;
}
这是因为每个循环的java都基于迭代器而不是基于索引的迭代。实际上foreach循环内部使用迭代器。所以它没有任何索引。它会自动移动到集合或列表的项目上,并根据需要获取对每个项目的引用。
查看此图片
这样迭代器就可以遍历没有索引的每个元素或对象。所以作为for循环。
或者您可以使用
User user = null;
for (int counter = 0; counter < userList.size(); counter++) {
user = userList.get(counter);
}
答案 2 :(得分:2)
您可以使用单独的计数器:
int index = 0;
for (User user: list) {
//use index
index++;
}
但说实话,如果你确实需要索引,那么使用普通的for循环可能更容易:
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
}
答案 3 :(得分:2)
这种类型的循环称为 foreach 循环..它迭代集合元素 所以没有真正的索引..它就像矢量有迭代器(如果你在c ++中知道stl)
你说的常规for循环(for(int i = 0 ...))将根据需要给出索引
答案 4 :(得分:1)
我担心你必须使用这个或与计数器的for循环。没有其他办法。
int index = 0;
for(User user:userList){
....
index++;
}