增强for循环(forearch)

增强for循环是为了简化在遍历数组需要先获得数组的长度或者在遍历集合中的元素的时候需要使用迭代器的操作。

引入时间:JDK1.5

语法格式:

for(数据类型 变量 :需要迭代的数组或者集合){

}

限制条件:
  增强for循环只能用在数组或实现了Iterable接口的集合类上。

作用:

  是为了让你的代码变得简捷、和容易维护。

代码示例如下:

 1 import java.util.HashMap;
 2 import java.util.HashSet;
 3 import java.util.Iterator;
 4 import java.util.Map;
 5 import java.util.Set;
 6 
 7 //自定义List
 8 class NickList implements Iterable<Object>{
 9     
10     int index = 0;
11     Object[] arr = new Object[10];
12     
13     public void add(Object obj) {
14         arr[index++] = obj;
15     }
16     
17     @Override
18     public Iterator<Object> iterator() {
19         return new Iterator<Object>() {
20             int cursor  = 0;
21 
22             @Override
23             public boolean hasNext() {
24                 return cursor<index;
25             }
26 
27             @Override
28             public Object next() {
29                 return (Object) arr[cursor++];
30             }
31         };
32     }
33     
34 }
35 
36 public class DomeForEarch {
37 
38     public static void main(String[] args) {
39         //普通数据进行遍历
40         int[] num = {1,2,3};
41         for (int i : num) {
42             System.out.println("普通数组遍历结果:"+i);
43         }
44         //单列集合进行遍历
45         HashSet<String> set = new HashSet<String>();
46         set.add("张三");
47         set.add("李四");
48         set.add("王五");
49         for (String name : set) {
50             System.out.println("set遍历结果:"+name);
51         }
52         //map进行遍历
53         HashMap<String, String> map = new HashMap<String,String>();
54         map.put("110", "李四");
55         map.put("210", "王五");
56         map.put("310", "张三");
57         //因为Map没有实现Iterable接口,所以要把Map转化为set来进行遍历
58         Set<Map.Entry<String,String>> entrys = map.entrySet();
59         for (Map.Entry<String,String> entry : entrys) {
60             System.out.println("key:"+entry.getKey()+"value"+entry.getValue());
61         }
62         
63         //自定义集合使用增强for循环
64         NickList nickList = new NickList();
65         nickList.add("张三");
66         nickList.add("李四");
67         nickList.add("王五");
68         for (Object item : nickList) {
69             System.out.println(item);
70         }
71     }
72 }
View Code

需要注意的细节:

  1. 增强for循环底层也是使用了迭代器获取的,只不过获取迭代器由jvm完成,不需要我们获取迭代器而已,所以在使用增强for循环变量元素的过程中不准使用集合对象对集合的元素个数进行修改。
    2. 迭代器遍历元素与增强for循环变量元素的区别:使用迭代器遍历集合的元素时可以删除集合的元素,而增强for循环变量集合的元素时,不能调用迭代器的remove方法删除元素。
    3. 普通for循环与增强for循环的区别:普通for循环可以没有变量的目标,而增强for循环一定要有变量的目标。

原文地址:https://www.cnblogs.com/nicker/p/6242764.html