zoukankan      html  css  js  c++  java
  • 增强for循环 -- foreach循环

    1  作用

      简化迭代器的书写格式。(注意:foreach循环的底层还是使用了迭代器遍历。)

    2  适用范围

      如果是实现了Iterable接口的对象或者是数组对象都可以使用foreach循环。

    3  格式

      for(数据类型 变量名 :遍历的目标){


      }

    示例:

    1 public static void main(String[] args) {
    2     HashSet<String> set = new HashSet<>();
    3     set.add("张三");
    4     set.add("李四");
    5     set.add("王五");
    6         
    7 }

    若想遍历这个集合,可以用迭代器

    1 //使用迭代器遍历集合
    2 Iterator it = set.iterator();
    3 while(it.hasNext()){
    4     System.out.println("集合的元素为: " + it.next());
    5 }

    有没有更简洁的办法呢?可以用foreach循环

    1 for(String it : set){
    2     System.out.println("集合的元素:" + it);
    3 }

    这个循环应该读作 -- “循环set中的每一个元素”(for each element in set)

    4  foreach循环的优点在于:相比普通for循环来更加简洁,更加不容易出错(不必为数组下标的起始值和终止值担心)

    5  foreach循环应该注意的事项:

    (1). foreach循环底层也是使用了迭代器获取的,只不过获取迭代器由jvm完成,不需要我们获取迭代器而已,所以在使用foreach循环变量元素的过程中不准使用集合对象对集合的元素个数进行修改。

    也就是说:

    1 for(String it : set){
    2     System.out.println("集合的元素:" + it);
    3     set.remove("it");
    4 }

    上面这个调用remove方法是错误的!


    (2). 普通for循环与foreach循环的区别:普通for循环可以没有变量的目标,而foreach循环一定要有变量的目标。

    6  缺点:在对数组索引进行操作或者集合进行增删操作时,显得力不从心,此时不建议使用foreach循环

    回顾第二点,它的使用范围,如果现在有一个Map集合,怎么对它使用foreach循环?

      通过查看API文档可得知,Map集合没有实现Iterable接口,所以Map集合不能直接使用foreach循环

      

      但是它有一个entrySet方法(Map的迭代方法),它的返回类型是Set<Map.Entry<K,V>>

      

      我们知道Set接口下是实现了Iterable接口的:

      

    所以我们可以这样:

    1 HashMap<String, String> map = new HashMap<String, String>();
    2     map.put("001","张三");
    3     map.put("002","李四");
    4     map.put("003","王五");
    5     map.put("004","赵六");
    6     Set<Map.Entry<String, String>> entrys = map.entrySet();
    7     for(Map.Entry<String, String> entry  : entrys){
    8         System.out.println("键:"+ entry.getKey()+" 值:"+ entry.getValue());
    9     }

    最后的建议:若没有其他操作,单单遍历循环,能用foreach循环就用这个 

    最后的最后:这是JDK1.5时才存在的!

  • 相关阅读:
    oracle 数据库 Cause: java.sql.SQLSyntaxErrorException: ORA-00904: "BODY": 标识符无效
    windows获取所有连接过的无线网密码
    element-ui 组件 el-calendar 农历显示问题
    mysql表复制
    console 打印消息时,可以使用 %c 指定随后的文本样式; %s 可引用参数变量。
    mysql 查询出现 "this is incompatible with sql_mode=only_full_group_by"错误解决方案,以及个人rpm方式重装所遇到的问题备份
    java 关于xlsx(xls) 和 csv 文件的数据解析
    idea websorm 激活码(2020-1-6 实测可用)最新
    mysql 连接查询 转换group_concat, find_in_set
    今天带来compass的使用方式
  • 原文地址:https://www.cnblogs.com/shadowdoor/p/6852656.html
Copyright © 2011-2022 走看看