2013-02-15 31 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); 
}