2013-06-25 23 views
-1

我正在经历java增强for循环和迭代器之间的差异。关于Java增强for循环访问索引的含义是什么?

我从净

的这个声明下面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()); 
    } 
} 
+1

如果索引是很重要的,不要使用foreach循环或者在每次通过循环时手动增加它。简单。 – Patashu

+0

可能是英语中的一个更好的问题。 –

+0

*这就是*“开发人员需要访问索引时所有好处都会丢失”* - 如果您需要知道循环中的索引,那么'foreach'循环的所有好处都是无关紧要的,因为你需要自己执行一个标准的'for-next'循环 – MadProgrammer

回答

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++; 
} 
2

在这是不可能访问索引for-each循环,你将不得不维护一个计数器。

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

1

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

for-each循环的目的是抽象出索引的思想,并只关注你想要做的核心 - 迭代该事物。如果您使用for-each循环,这是否通过索引或其他方式无关紧要。

1

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

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

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