在创建“列表”对象类型后,我已经看到了使用这种 FOR 循环的不同方法。
List<Focus> focuses = new ArrayList<Focus>();
String my_string = "";
for (Focus obj1 : list_obj_x) {
my_string += obj1;
}
我不明白这个 FOR 循环在这种情况下是如何工作的。
谢谢
它被称为增强的 for-loop/For-Each 构造。在 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);
}
但是请注意,您只能对那些实现Iterable 接口的对象使用 for-each 循环。
实现这个接口允许一个对象成为“foreach”语句的目标。
增强的 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);
}
它的用途不仅限于列表和数组等“索引集合”。
参考
for (Focus obj1 : list_obj_x) {
my_string += obj1;
}
当您看到冒号 (:) 时,将其读作“in”。上面的循环读作“对于 list_obj_x 中的每个 Focus obj1”。如您所见,for-each 构造与泛型完美结合。它保留了所有类型的安全性,同时消除了剩余的混乱。因为您不必声明迭代器,所以您不必为它提供通用声明。(编译器会在你背后为你做这件事,但你不必关心它。)
相当于上面的每个循环是:
for (int i =0 ; i< list_obj_x.size(); i++) {
my_string += list_obj_x.get(i);
}