zoukankan      html  css  js  c++  java
  • foreach(增强for循环)和for的区别

      首先说一下foreach有的也叫增强for循环,foreach其实是for循环的一个特殊简化版。

      再说一下foreach的书写格式:

         for(元素类型  元素名称 : 遍历数组(集合)(或者能进行迭代的)){

          语句

         }

      foreach虽然是for循环的简化版本,但是并不是说foreach就比for更好用,foreach适用于循环次数未知,或者计算循环次数比较麻烦情况下使用效率更高,但是更为复杂的一些循环还是需要用到for循环效率更高。

      我们看看下面的例子:

     1 public static void main(String[] args) {
     2         List<String> arr = new ArrayList<String>();
     3         arr.add("你好");
     4         arr.add("我好");
     5         arr.add("大家好");
     6         
     7         //foreach循环
     8         for(String str : arr){                      //这里的str就是为了获取每次循环的arr中的值
     9             System.out.println(str);               //就相当于 String str=arr[i]
    10         }
    11     }

      但是相比较之下我们用for循环输入就略显麻烦

    public static void main(String[] args) {
            List<String> arr = new ArrayList<String>();
            arr.add("你好");
            arr.add("我好");
            arr.add("大家好");
            
            //for循环
            for(int i=0;i<arr.size();i++){
                System.out.println(arr.get(i));    //要获取list中元素需要用get方法    
            }
        }

      除了这种普通的集合还可以对像map这种键值对使用

      例如: 

    public static void main(String[] args) {
            Map<String,String> mapstr = new HashMap<String,String>();
            mapstr.put("王", "男");
            mapstr.put("李", "男");
            mapstr.put("张", "女");
                                //entrySet方法是为了获取键值对的集合
            for(Map.Entry<String, String> s : mapstr.entrySet()){   //这里的Map.Entry<String, String>其实就是一个类型 用来表示键值对的类型
                System.out.println("key="+s.getKey());            //这里其实还是相当于 s=maostr.entrySet,只不过s存储的是键值对。
                System.out.println("value="+s.getValue());        //所以可以用get方法获取出来存储的键值对。
            }
        }

      另外foreach不支持在循环中添加删除操作,因为在使用foreach循环的时候数组(集合)就已经被锁定不能被修改,否则会报出java.util.ConcurrentModificationException异常

      例如:

    public static void main(String[] args) {
            List<String> arr = new ArrayList<String>();
            arr.add("你好");
            arr.add("我好");
            arr.add("大家好");
            
            //foreach循环
            for(String str : arr){                    
                System.out.println(str);            
                arr.add("1");                    //对arr进行添加    
            }
        }

      关于不能添加删除原理以及如何在foreach中添加删除我们下篇再说。

      所以总结如下

      foreach适用于只是进行集合或数组遍历,for则在较复杂的循环中效率更高。

      foreach不能对数组或集合进行修改(添加删除操作),如果想要修改就要用for循环。

      所以相比较下来for循环更为灵活。

      

  • 相关阅读:
    Nodejs下载和第一个Nodejs示例
    永久关闭Win10工具栏的TaskbarSearch控件
    对称加密,非对称加密,散列算法,签名算法
    【转】TTL和RS232之间的详细对比
    zlg核心板linux系统中查看系统内存等使用信息
    Power BI后台自动刷新数据报错 The operation was throttled by Power BI Premium because there were too many datasets being processed concurrently.
    剪切板和上传文件内容获取
    CSS, LESS, SCSS, SASS总结
    文字程序
    electron 打包“ERR_ELECTRON_BUILDER_CANNOT_EXECUTE”
  • 原文地址:https://www.cnblogs.com/XiaojianGo/p/7471860.html
Copyright © 2011-2022 走看看