zoukankan      html  css  js  c++  java
  • 增强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循环一定要有变量的目标。

  • 相关阅读:
    Mysql的row_format(fixed与dynamic)
    no-referrer-when-downgrade什么意思
    a标签属性 rel=noopener noreferrer
    深入理解ob_flush和flush的区别
    win7下php7.1运行getenv('REMOTE_ADDR')fastcgi停止运行
    学会了这项技能,你就能获得任何想要的信息!
    原来游戏技术行业最大的秘密竟然是...
    王亮:游戏AI探索之旅——从alphago到moba游戏
    入门系列之在Ubuntu 14.04上备份,还原和迁移MongoDB数据库
    入门系列之在Ubuntu上安装Drone持续集成环境
  • 原文地址:https://www.cnblogs.com/nicker/p/6242764.html
Copyright © 2011-2022 走看看