【问题标题】:Get index at new for loop [duplicate]在新的for循环中获取索引[重复]
【发布时间】:2013-04-10 03:22:30
【问题描述】:

我有一个跟随循环

ArrayList<User> userList;
for(User user:userList){
    ....
}

如何获取我正在使用的当前 obj 的索引? 我可以将其更改为常规的 for(int i...) 循环,但这会适得其反。

谢谢。

【问题讨论】:

  • 在循环外声明一个 int 索引,每次迭代都会增加
  • 为什么会适得其反?
  • 实际上,当您需要可能适得其反的索引时,它正在使用 foreach 循环。

标签: java for-loop


【解决方案1】:

如果您想使用索引,使用for(int i...) 非常有意义。

【讨论】:

    【解决方案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】:

    恐怕您必须使用这个或带有计数器的 for 循环。没有其他办法。

    int index = 0;
    for(User user:userList){
        ....
        index++;
    }
    

    【讨论】:

      【解决方案4】:

      你必须像这样使用自己的计数器

      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);
      }
      

      【讨论】:

        【解决方案5】:

        这种类型的循环称为 foreach 循环。它迭代集合元素 所以没有真正的索引..它就像有迭代器的向量(如果你知道 c++ 中的 stl)

        您所说的常规 for 循环 (for (int i = 0 ... ) ) 将根据需要提供索引

        【讨论】:

          猜你喜欢
          • 2013-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-26
          • 1970-01-01
          • 1970-01-01
          • 2017-08-13
          • 2013-07-18
          相关资源
          最近更新 更多