java如何定制自己的增强for循环



java如何定制自己的增强for循环?以及相关的局限性实例代码介绍。

不能在增强for循环中访问位置,例如下面的代码:

String[] persons={“张三”,”李四”,”王五”};
for(int i=0;i<persons.length;i++){
System.out.println(i+”:”+persons[i]);
}

增强for循环中你是得不到这个位置”i”的。
例如还有我们常用的在组合sql语句,select字段的时候,当是最后一个字段时,不能加”,”的。
String[] fields={“name”,”age”,”sex”};
StringBuilder sql=new StringBuilder(“select “);
for(int i=0;i<fields.length;i++){
if(i<fields.length-1){
sql.append(fields[i]+”,”);
}else{
sql.append(fields[i]);
}
}
sql.append(” from t_user”);
System.out.println(sql);
这在增强for循环中也是不能处理的。。
还有对元素的删除,在增强for循环中也不能做到,但是使用传统的Iterator接口遍历时就可以使用他的remove()方法删除符合条件的元素。

foreach的语句格式:for(元素类型t 元素变量x : 遍历对象obj){     引用了x的java语句;}下面通过两个例子简单例子看看foreach是如何简化编程的。代码如下:一、foreach简化数组和集合的遍历import java.util.Arrays; 
import java.util.List;
import java.util.ArrayList;
public class TestArray { 
public static void main(String args[]) {
TestArray test = new TestArray();
test.test1();
test.listToArray();
test.testArray3();

/** 
* foreach语句输出一维数组
*/
public void test1() {
//定义并初始化一个数组
int arr[] = {2, 3, 1};
System.out.println(“—-1—-排序前的一维数组“);
for (int x : arr) {
System.out.println(x); //逐个输出数组元素的值
}

//对数组排序
Arrays.sort(arr);

//利用java新特性for each循环输出数组
System.out.println(“—-1—-排序后的一维数组“);
for (int x : arr) {
System.out.println(x); //逐个输出数组元素的值
}
}

/** 
* 集合转换为一维数组
*/
public void listToArray() {
//创建List并添加元素
List<String> list = new ArrayList<String>();
list.add(“1″);
list.add(“3″);
list.add(“4″);

//利用froeach语句输出集合元素 
System.out.println(“—-2—-froeach语句输出集合元素”);
for (String x : list) {
System.out.println(x);
}

//将ArrayList转换为数组
Object s[] = list.toArray();


//利用froeach语句输出集合元素
System.out.println(“—-2—-froeach语句输出集合转换而来的数组元素”);
for (Object x : s) {
System.out.println(x.toString()); //逐个输出数组元素的值
}
}

/**
* foreach输出二维数组测试
*/
public void testArray2() {
int arr2[][] = {{4, 3}, {1, 2}};
System.out.println(“—-3—-foreach输出二维数组测试”);
for (int x[] : arr2) {
for (int e : x) {
System.out.println(e); //逐个输出数组元素的值
}
}
}

/**
* foreach输出三维数组
*/
public void testArray3() {
int arr[][][] = {
{{1, 2}, {3, 4}},
{{5, 6}, {7, 8}}
};

System.out.println(“—-4—-foreach输出三维数组测试”);
for (int[][] a2 : arr) {
for (int[] a1 : a2) {
for (int x : a1) {
System.out.println(x);
}
}
}
}
}运行结果:—-1—-排序前的一维数组
2
3
1
—-1—-排序后的一维数组
1
2
3
—-2—-froeach语句输出集合元素
1
3
4
—-2—-froeach语句输出集合转换而来的数组元素
1
3
4
—-4—-foreach输出三维数组测试
1
2
3
4
5
6
7
8

Process finished with exit code 0

二、foreach语句的局限性通过上面的例子可以发现,如果要引用数组或者集合的索引,则foreach语句无法做到,foreach仅仅老老实实地遍历数组或者集合一遍。下面看一个例子就明白了:/**
public class TestArray2 {

public static void main(String args[]) {
//定义一个一维数组
int arr[] = new int[4];
System.out.println(“—-未赋值前输出刚刚定义的数组—-”);
for (int x : arr) {
System.out.println(x);
}

//通过索引给数组元素赋值
System.out.println(“—-通过循环变量给数组元素赋值—-”);
for (int i = 3; i > 0; i–) {
arr[i] = i;
}
//循环输出创建的数组
System.out.println(“—-赋值后,foreach输出创建好的数组—-”);
for (int x : arr) {
System.out.println(x);
}
}
}
运行结果:—-未赋值前输出刚刚定义的数组—-
0
0
0
0
—-通过循环变量给数组元素赋值—-
—-赋值后,foreach输出创建好的数组—-
0
1
2
3

Process finished with exit code 0

四:java for循环总结小结
增强for循环有它的好处,比如简洁,代码优雅,如果能使用增强for循环,一定要优先使用。