迭代器和增强型for循环

★迭代器:

 Java集合框架的集合类,我们有时候称之为容器。容器的种类有很多种,比如ArrayList、LinkedList、HashSet...,每种容器都有自己的特点,ArrayList底层维护的是一个数组;LinkedList是链表结构的;HashSet依赖的是哈希表,每种容器都有自己特有的数据结构。

  因为容器的内部结构不同,很多时候可能不知道该怎样去遍历一个容器中的元素。所以为了使对容器内元素的操作更为简单,Java引入了迭代器模式! 

  把访问逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合的内部结构。

public class CollectionDemo1 {
    public static void main(String[] args) {
        //集合中可以存任意类型
        Collection co = new ArrayList<>();
        co.add("a");
        co.add("sfadjkjksd");
        //迭代器   获取迭代器
        Iterator it = co.iterator();
        
        while(it.hasNext()){//判断是否存在下个元素
            String s = (String)it.next();//获取下个元素
            //System.out.println(s);
            System.out.println(s.length());
        }
    }
}

★增强型for循环:

  1.增强型for循环使用起来比较方便,代码也比较简单,如果只是操作集合中元素的而不使用索引的话,建议用此方法。
对于普通for循环,如果需要使用索引进行其它操作的话,建议用这个。

  2,特点:
    书写简洁:
  对集合进行遍历,只能获取集合元素,不能对集合进行操作,类似迭代器的简写形式,但是迭代器可以对元素进行remove操作(ListIterator可以进行增删改查的操作)。

  3,格式:
    for(数据类型变量名 :被遍历的集合(collection)或者数组) {
        执行语句
    }

public class ForEach {
    public static void main(String[] args) {
        fun();
    }
    //for循环的弊端    有下标
    //增强for循环优点     代码少了   没有索引
    public static void fun(){
        int[] arr={12,5,689,45,23,69,87};
//        for (int i = 0; i < arr.length; i++) {
//            System.out.println(arr[i]);
//        }
        for(int i: arr){
            System.out.println(i+1);//没有下标,不能对元素进行单个操作,整体加一
        }
        System.out.println(arr[0]);
    }
}

 ★迭代器和增强型for循环的并发异常:

/* 迭代器的并发异常   java.util.ConcurrentModificationException
 * 增强for循环     java.util.ConcurrentModificationException
* 在遍历或者迭代过程中对集合进行增删 都会发生异常
* */

public class ListDemo {
    public static void main(String[] args) {
        List<String> s=new ArrayList<String>();
        s.add("欲问青天这人生有几何");
        s.add("这人生有几何");
        s.add("怕这去日苦多");
//判断集合中是否有"这人生有几何",假如有,那么把"爱的故事上集"添加到集合中.
/*//增强型for循环
        for(String i:s){
            if (i.equals("这人生有几何")) {
                s.add("爱的故事上集");
            }
        }
        */
        /*迭代器
        Iterator<String> it=s.iterator();
        while (it.hasNext()) {
            String s1 = (String) it.next();
            if (s1.equals("这人生有几何")) {
                s.add("爱的故事上集");
            System.out.println(s1);
        }
        } */
//判断集合中是否有"这人生有几何",假如有,那么把"爱的故事上集"添加到集合中.
        for (int i = 0; i < s.size(); i++) {
            //System.out.println(s.get(i));
                if((s.get(i)).equals("这人生有几何")){
                    s.add("爱的故事上集");
                }
        }
        for (int i = 0; i < s.size(); i++) {
            System.out.println(s.get(i));
        }
  }
}

 

posted on 2019-03-21 15:48  不酷也要写代码  阅读(1119)  评论(0编辑  收藏  举报

导航