Iterator迭代器

Iterator


  • Iterator对象成为迭代器(设计模式的一种),主要用于遍历Collection集合中的元素。

  • GOF给迭代器的定义为,提供一种方法访问一个容器(container)对象中各个元素,而又不暴露该对象的内部细节。迭代器模式,就是为了容器而生。

  • Iterator仅用于遍历集合,Iterator本身并不提供承载对象的能力。如果需要创建Iterator对象,则必须有一个被迭代的集合

  • 集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。


package com.cheng.collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Itertor {
   public static void main(String[] args) {
       Collection coll = new ArrayList();
       coll.add(123);
       coll.add(456);
       coll.add(new String("牛不牛"));
       coll.add(false);
       coll.add(new Person("Ali",24));

       //迭代器遍历集合
       Iterator iterator = coll.iterator();
       while (iterator.hasNext()){//hasNext判断是否有下一元素
           System.out.println(iterator.next());//遍历
      }
       /*
       迭代器的两种错误用法
       while(coll.iterator.hasnext){
           System.out.println(iterator.next());
       } 这个会陷入死循环,因为每次调用iterator时候都会生成一个新的迭代器对象,而新的迭代器对象指针都是定位第一个元素之前
       如 1 2 3 4 会一直输出1


      while(iteritor.next != null){
           System.out.println(iterator.next());
      }这个会跳着输出 比如 1 2 3 4
      判断1不空 然后输出2
      判断3不空 然后输出4
        */
       //remove 移除 不能没用next就移除(这是指针在第一个元素之前) 或者移除两次
       Iterator iterator1 = coll.iterator();
       while (iterator1.hasNext()){
           Object obj = iterator1.next();
           if ("牛不牛".equals(obj)) {
               iterator1.remove();//remove移除牛不牛元素
          }
      }
       Iterator iterator2 = coll.iterator();
       while (iterator2.hasNext()){
           System.out.println(iterator2.next());
      }

  }
}

上一篇:尚硅谷JavaSE入门笔记 - P516 ~ P561


下一篇:java基础复习03