首页 > 代码库 > 加强型for循环
加强型for循环
语法是:
- for(ElementType element:arrayName){};
- int[] numArray = { 1, 2, 3, 4, 5, 6 };
- for (int i : numArray) {
- System.out.print(i);
- }
等价于(2)
- int[] numArray = { 1, 2, 3, 4, 5, 6 };
- for (int i=0; i < numArray.length; i++) {
- System.out.print(numArray[i]);
- }
- int[] numArray = { 1, 2, 3, 4, 5, 6 };
- for (int i=0; i < numArray.length; i++) {
- int j = numArray[i];// 这个j,就等价与(1)中的i
- System.out.println(j);
- }
- List<Integer> intList = new ArrayList<Integer>();
- for (Integer i : intList) {
- System.out.print(i);// 可以打印出intList中的所有元素
- }
part2中是一个数组对象,或者是带有泛性的集合.
part1定义了一个局部变量,这个局部变量的类型与part2中的对象元素的类型是一致的.
part3当然还是循环体.
J2SE 1.5提供了另一种形式的for循环。借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象。本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类,并解释和这一机制的一些常见问题。
在Java程序中,要“逐一处理”——或者说,“遍历”——某一个数组或Collection中的元素的时候,一般会使用一个for循环来实现(当然,用其它种类的循环也不是不可以,只是不知道是因为for这个词的长度比较短,还是因为for这个词的含义和这种操作比较配,在这种时候for循环比其它循环常用得多)。 对于遍历数组,这个循环一般是采取这样的写法:清单1:遍历数组的传统方式
int[] integers = {1, 2, 3, 4}; for (int j = 0; j < integers.length; j++) { int i = integers[j]; System.out.println(i); } 而对于遍历Collection对象,这个循环则通常是采用这样的形式:清单2:遍历Collection对象的传统方式
String[] strings = {"A", "B", "C", "D"}; Collection stringList = java.util.Arrays.asList(strings); for (Iterator itr = stringList.iterator(); itr.hasNext();) { Object str = itr.next(); System.out.println(str); } 而在Java语言的最新版本——J2SE 1.5中,引入了另一种形式的for循环。借助这种形式的for循环,现在可以用一种更简单地方式来进行遍历的工作。 1. 第二种for循环 不严格的说,Java的第二种for循环基本是这样的格式: for (循环变量类型 循环变量名称 : 要被遍历的对象) 循环体 借助这种语法,遍历一个数组的操作就可以采取这样的写法:清单3:遍历数组的简单方式
int[] integers = {1, 2, 3, 4}; for (int i : integers) { System.out.println(i); } 这里所用的for循环,会在编译期间被看成是这样的形式:清单4:遍历数组的简单方式的等价代码
int[] integers = {1, 2, 3, 4}; for (int 变量名甲 = 0; 变量名甲 < integers.length; 变量名甲++) { System.out.println(变量名甲); } 这里的“变量名甲”是一个由编译器自动生成的不会造成混乱的名字。 而遍历一个Collection的操作也就可以采用这样的写法:清单5:遍历Collection的简单方式
String[] strings = {"A", "B", "C", "D"}; Collection list = java.util.Arrays.asList(strings); for (Object str : list) { System.out.println(str); } 这里所用的for循环,则会在编译期间被看成是这样的形式:清单6:遍历Collection的简单方式的等价代码 String[] strings = {"A", "B", "C", "D"}; Collection stringList = java.util.Arrays.asList(strings); for (Iterator 变量名乙 = list.iterator(); 变量名乙.hasNext();) { System.out.println(变量名乙.next()); } 这里的“变量名乙”也是一个由编译器自动生成的不会造成混乱的名字。 因为在编译期间,J2SE 1.5的编译器会把这种形式的for循环,看成是对应的传统形式,所以不必担心出现性能方面的问题。上网查了下,增强型for循环是Java1.5的新特性。所谓“增强型的for 循环”,主要也是针对容器的。使用该项特性时,开发者可以将“利用iterator 遍历容器”的逻辑交给编译器来处理。
例如一个旧的例子:
String name[]={"张三","李四","王五"};
for(int i=0;i<name.length;i++){
System.out.println(name[i]);
}
使用增强型的for循环可以这样写:
String name[]={"张三","李四","王五"};
for(String str:name){
System.out.println(str);
}
遍历二维数组也可以啊,要这样写:
String name[][]={{"张三","李四","王五"},{"张六","李七","王八"},{"张九","李十","王十一"}};
for(String str1:name){
for(String str2:str1){
System.out.println(str2);
}
}
实际上,这一项特性应该普遍地与泛型结合,以获得最大的利益。看看我们以前是怎么遍历集合类的,一个简单的例子:
ArrayList<String> arrayList=ArrayList<String>();
for(int i=0;i<10;i++){
arrayList.add("myBook"+i);
}
for(int i=0;i<arrayList.size();i++){
System.out.println(arrayList[i]);
}
使用增强型for循环后就可以这样写了(跟上边的差不多啦):
ArrayList<String> arrayList=ArrayList<String>();
for(int i=0;i<10;i++){
arrayList.add("myBook"+i);
}
for(String str:arrayList)[
System.out.println(str);
}
For-Each循环也叫增强型的for循环,或者叫foreach循环。
For-Each循环是JDK5.0的新特性(其他新特性比如泛型、自动装箱等)。
For-Each循环的加入简化了集合的遍历。
其语法如下:
for(type element: array)
{
System.out.println(element);
}
例子
其基本使用可以直接看代码:
代码中首先对比了两种for循环;之后实现了用增强for循环遍历二维数组;最后采用三种方式遍历了一个List集合。
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ForeachTest { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5}; System.out.println("----------旧方式遍历------------"); //旧式方式 for(int i=0; i<arr.length; i++) { System.out.println(arr[i]); } System.out.println("---------新方式遍历-------------"); //新式写法,增强的for循环 for(int element:arr) { System.out.println(element); } System.out.println("---------遍历二维数组-------------"); //遍历二维数组 int[][] arr2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} ; for(int[] row : arr2) { for(int element : row) { System.out.println(element); } } //以三种方式遍历集合List List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); System.out.println("----------方式1-----------"); //第一种方式,普通for循环 for(int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } System.out.println("----------方式2-----------"); //第二种方式,使用迭代器 for(Iterator<String> iter = list.iterator(); iter.hasNext();) { System.out.println(iter.next()); } System.out.println("----------方式3-----------"); //第三种方式,使用增强型的for循环 for(String str: list) { System.out.println(str); } } }
For-Each循环的缺点:丢掉了索引信息。
当遍历集合或数组时,如果需要访问集合或数组的下标,那么最好使用旧式的方式来实现循环或遍历,而不要使用增强的for循环,因为它丢失了下标信息。
加强型for循环