zoukankan      html  css  js  c++  java
  • Java之增强的for 循环

    3. 增强for循环

    1) 作用:

     对存储对象的容器进行迭代  

    2)  jdk5以前怎么迭代

    3) 增强for循环迭代数组

    String [] arr = {"a", "b","c"};       //数组的静态定义方式,只试用于数组首次定义的时候

    // 传统方式

    for(int i=0; i<arr.length; i++) {

             //i依次表示数组的角标

             Strings = arr[i];

             System.out.println(s);

    }

    System.out.println("-------------------------------------");

    // 在jdk5中我们可以使用增强for循环迭代

    // 增强for循环括号里写两个参数,第一个是声明一个变量,变量类型必须是数组元素的类型

    // 第二个就是需要迭代的容器

    // for循环会循环容器的length次, 每次都将容器的第n-1个元素赋值给声明的变量

    for(String s : arr) {

             //循环体, 执行arr.length

             //每次都将arr中的第n-1个元素给s

             System.out.println(s);        //

    }

    4) 单列集合Collection

    List list = new ArrayList();

    list.add("aaa");

    list.add("bbb");

    list.add("ccc");

    // 传统方式1

    /* 1.获得迭代器

    Iterator iter = list.iterator();

    // 2.循环判断迭代器是否有下一个

    while(iter.hasNext()) {

             Stringstr = (String) iter.next();  // 将迭代器的指针移向下一个,并将迭代当前指向的元素返回

             System.out.println(str);

    }

    */

    // 传统方式2

    for(Iterator iter=list.iterator();iter.hasNext(); ) {

             Strings = (String) iter.next();

             System.out.println(s);

    }

    System.out.println("--------------------------------");

    // 增强for循环, 没有使用泛型的集合能不能使用增强for循环迭代?能

    for(Object obj : list) {

             Strings =  (String) obj;

             System.out.println(s);

    }

    5) 双列集合Map

    Map map = new HashMap();

    map.put("a", "aaa");

    map.put("b", "bbb");

    map.put("c", "ccc");

    // 传统方式迭代1

    // 1. 获得所有的key

    Set keys = map.keySet();

    // 2.迭代keys获得所有的key

    Iterator iter = keys.iterator();

    while(iter.hasNext()) {

             Stringkey = (String) iter.next(); // a b c

             //3.根据key获得对应的value

             Stringvalue = (String) map.get(key);

             System.out.println(key+ "=" + value);

    }

    System.out.println("---------------------------------");

    // 传统方式2,必须掌握这种方式

    // 1.获得所有的键值对Entry对象

    Set entrys = map.entrySet();

    // 2.迭代出所有的entry

    iter = entrys.iterator();

    while(iter.hasNext()) {

             Map.Entryentry = (Entry) iter.next();

             //分别获得key和value

             Stringkey = (String) entry.getKey();

             Stringvalue = (String) entry.getValue();

             System.out.println(key+ "=" + value);

    }

    System.out.println("-------------------------------------");

    System.out.println("增强for循环迭代,");

    // 增强for循环迭代,

    // 原则上map集合是无法使用增强for循环来迭代的,

    // 因为增强for循环只能针对实现了Iterable接口的集合进行迭代

    // Iterable是jdk5中新定义的接口,就一个方法iterator方法

    // 只有实现了Iterable接口的类,才能保证一定有iterator方法

    // java有这样的限定是因为增强for循环内部还是用迭代器实现的

    // 而实际上,我们可以通过某种方式来使用增强for循环

    for(Object obj : map.entrySet()) {

             //obj 依次表示Entry

             Map.Entryentry = (Entry) obj;

             System.out.println(entry.getKey()+ "=" + entry.getValue());

    }

    6)集合迭代注意问题

    // 在使用迭代器迭代集合的过程中,不能对集合进行增删操作

    @Test

    public void test4() {

             Listlist = new ArrayList();

            

             list.add("wangwu");

             list.add("zhangsan");

             list.add("lisi");

             Iteratoriter = list.iterator();

             while(iter.hasNext()){

                       Stringname = (String) iter.next();

                       if("wangwu".equals(name)){

                                //从集合中删掉

                                //list.remove(name);

                                //迭代过程中删除元素需要调用迭代器的方法

                                iter.remove();   // 删除我迭代的集合被我迭代的最后一个元素

                       }

             }

    // 1 2 4

             System.out.println(list.size());

    }

    @Test

    public void test5() {

             Listlist = new ArrayList();

            

             list.add("aa");

             list.add("bb");

            

             //使用ListIterator迭代器

             ListIteratorlistIterator = list.listIterator();

             while(listIterator.hasNext()){

                       listIterator.next();

                       //迭代过程中增加元素

                       listIterator.add("cc");

             }

             System.out.println(list.size());

    }

    7) 增强for循环注意问题

    //在使用增强for循环时,不能对元素进行赋值

    int[] arr = {1,2,3};

    for(int num : arr) {

             num= 0;

    }

    System.out.println(arr[1]);

    publicclass Demo3 {

             @Test

             public void test3(){

                       Map map=new HashMap();

                       //Map map2=newLinkedHashMap<K, V>();

                       map.put("1","aaa");

                       map.put("2","bbb");

                       map.put("3","ccc");

                       //传统方式1

                       Set set=map.keySet();

                       Iterator it=set.iterator();

                       while(it.hasNext()){

                                Stringkey=(String)it.next();

                                Stringvalue=(String) map.get(key);

                                System.out.println("key="+key+",value="+value);

                       }

                       //传统方式2

                       Set set2=map.entrySet();

                       Iterator it2=set2.iterator();

                       while(it2.hasNext()){

                                Map.Entry  entry=(Entry)it2.next();

                                System.out.println("key="+entry.getKey()+",value="+entry.getValue());

                       }

                       //增强for循环的1种方式

                       for(Object obj:map.keySet()){

                                Stringkey2=(String)obj;

                                Stringvalue2=(String)map.get(key2);

                                System.out.println("key2="+key2+",value2="+value2);

                       }

                       //增强for循环的2种方式

                       for(Objectobj:map.entrySet()){

                                Map.Entryentry3=(Entry) obj;

                                String key3=(String)entry3.getKey();

                                Stringvalue3=(String) entry3.getValue();

                                System.out.println("key3="+key3+",value3="+value3);

                       }

                       //增强for循环需要注意的问题:只适合取数据

                       int arr[]={1,2,3};

                       for(int i: arr){

                                i=10;

                       }

                       System.out.println(arr[0]);// 1

                       List li=new ArrayList();

                       li.add("1");

                       for(Object obj : li){

                                obj="888";

                       }

                       System.out.println(li.get(0));//1

             }

    }

    版权声明:本文为小平果原创文章,转载请注明:http://blog.csdn.net/i10630226

  • 相关阅读:
    如何使用log4net记录日志
    js鼠标左右键,键盘值
    MagicAjax的内部原理初探(一)
    关于VS2005内置web服务器和IIS的区别问题(讨论,收集)
    在Linux中使用C#
    方便你的测试(TestDriven.NET)
    转载:数据库sharding(scale up to scale out)
    单元测试--爱你不容易
    你期待已久的ASP.NET Atlas(一)[翻]
    Ajax底层代码简析(可直接用的框架)
  • 原文地址:https://www.cnblogs.com/dingxiaoyue/p/4948271.html
Copyright © 2011-2022 走看看