关于Java增强的for循环访问索引意味着什么?

时间:2013-06-25 04:29:19

标签: java

我正在研究java enhanced for loop和Iterator之间的区别。

我从网上得到了以下声明

for-each循环几乎可以肯定是Java 5中最新的流行功能。它的工作原理是因为它增加了抽象级别 - 而不是必须表达如何围绕列表循环的低级细节或数组(使用索引或迭代器),开发人员只是声明他们想循环,语言负责其余部分。但是,只要开发人员需要访问索引或删除项目,所有好处就会丢失。

我无法理解下面这行

  

一旦开发人员需要访问索引

,所有好处就会丢失

在增强的for循环中,how is it possible to access the index ??

附加一个示例程序,如果有人能告诉我在这种情况下如何访问索引会更好

package com;

import java.util.ArrayList;
import java.util.Iterator;

public class Tester {

    public static void main(String args[]) {

        ArrayList<String> list = new ArrayList<String>();

        list.add("One");
        list.add("Two");
        list.add("Three");
        list.add("Four");
        list.add("Five");
        list.add("Six");
        list.add("Seven");

        StringBuffer sb = new StringBuffer();

        // From here I want to change if this can be tuned anyway

        for (String result : list) {

            if (result.equals("One") || result.equals("Two")) {
                sb.append("1.0");
            }

            if (result.equals("Three")) {
                sb.append("3.0");
            } else {
                sb.append("4.0");
            }

        }

        System.out.println(sb.toString());
    }
}

5 个答案:

答案 0 :(得分:2)

  

在增强的for循环中,如何访问索引?

也许你不能明确地做到这一点。但是你可以在循环上方初始化一个局部变量,并在循环体内增加它。这样它就可以成为索引的代理。

在JSTL的forEach循环中,您可以拥有索引句柄,而不是Java的增强for循环。如果您需要使用索引,最好使用正统的for循环。

这个循环:

for(int i=0;i<list.size();i++) { String str = list.get(i); }

可简化为此

for(String str:list) {}

即便如此

int count = 0;
for(String str : list) {
 // your code
 count++;
}

答案 1 :(得分:2)

在for-each循环中,无法访问索引,您必须维护一个计数器。

请注意,某些集合不是随机访问,这意味着您无论如何也无法使用索引。

答案 2 :(得分:1)

for-each循环中,无法找到当前项的索引(没有列表的.indexOf(),或者明确地跟踪它)据我所知,所有这一切我要说的是,如果你需要访问索引,那么就不应该使用for-each循环。

for-each循环点是抽象出索引的思想,只关注你想要做的事情的核心 - 迭代这个东西。无论是通过索引还是其他方面,如果您使用for-each循环都无关紧要。

答案 3 :(得分:1)

使用计数器变量(在这种情况下,你最好使用正常的for循环),或使用ArrayList中的indexOf成员函数。

你最好选择使用常规for循环,因为我相信indexOf比保留当前索引的计数器变量要贵得多。

答案 4 :(得分:1)

实际上,您可以使用在增强型for循环之外定义的局部变量来计算循环运行的次数

像:

int count = 0;
Array <Integer> int_array = new ArrayList<Integer>()
int_array.add(1);
int_array.add(2);
int_array.add(3);

for (Integer int_element : int_array)
{
   //some functionality codes here
   // ...

   //update the count
   count ++;
}