2013-02-15 32 views
-4

我已经看到了创建一个“List”对象类型后使用FOR循环的不同方法。这是什么动态循环在java

List<Focus> focuses = new ArrayList<Focus>(); 
String my_string = ""; 
for (Focus obj1 : list_obj_x) { 
    my_string += obj1; 
} 

我不明白这个FOR循环是如何工作的。

感谢

+5

我想不明白,如果* *它的工作...什么是'list_obj_x',除了是内容违反命名约定一个变量名? – 2013-02-15 16:29:42

+0

该代码不起作用。因为我想知道FOR循环的工作方式或FOR循环的名称。 – 2013-02-15 16:44:06

+0

很多东西都不起作用。例如,您不能将“Focus”的实例追加到字符串中。 (应该是'my_string + = obj1.toString()'或类似的东西) – 2013-02-15 16:47:06

回答

1

增强的for循环可与任何使用实现Iterable<X>和数组的对象。它等同于使用for循环与一个迭代(在迭代的情况下):

// with Iterables: 

Iterable<String> iterableStrings = getListOfStrings(); 

// standard for loop 
for (Iterator<String> it = iterableStrings.iterator(); it.hasNext();) { 
    String s = it.next(); 
    System.out.println(s); 
} 

// enhanced for loop 
for (String s : iterableStrings) { 
    System.out.println(s); 
} 

// with arrays: 

String[] stringArray = getStringArray(); 

// standard for loop 
for (int i = 0; i < stringArray.length; i++) { 
    String s = stringArray[i]; 
    System.out.println(s); 
} 

// enhanced for loop 
for (String s : stringArray) { 
    System.out.println(s); 
} 

它的使用是不限于“索引的集合”像列表和数组。

参考

JLS 14.14.2

3

这就是所谓的enhanced for-loop/For-Each construct。在java 1.5中引入。它首先被引入来迭代集合和数组。

此:

List<Focus> focuses = new ArrayList<Focus>(); 
String my_string = ""; 
for (Focus obj1 : list_obj_x) { 
    my_string += obj1; 
} 

是相同

List<Focus> focuses = new ArrayList<Focus>(); 
String my_string = ""; 
for (int i=0; i<focuses.size(); i++) { 
    my_string += focuses.get(i); 
} 

注意,但是,你只能使用for-each循环对于那些实施Iterable interface对象。

实现此接口允许对象成为“foreach”语句的目标。

1
for (Focus obj1 : list_obj_x) { 
    my_string += obj1; 
} 

当你看到冒号(:)“在”读它上面的循环读作“每个在list_obj_x重点OBJ1。”正如你所看到的,for-each结构精美的结合与泛型。它保留了所有类型的安全性,同时消除了剩余的杂波。因为您不必声明迭代器,所以不必为其提供通用声明。 (编译器为您完成此你背后,但你不必用它关心自己)

,相等于上述每个循环是:

for (int i =0 ; i< list_obj_x.size(); i++) { 
    my_string += list_obj_x.get(i); 
}