我是靠谱客的博主 痴情便当,这篇文章主要介绍Day45.迭代器Iterator接口的使用 -Java常用类、集合#、IO使用Iterator接口的遍历Collection集合元素Iterator迭代器的执行原理迭代器Iterator遍历集合元素的两种错误写法Iterator接口的remove()方法的使用,现在分享给大家,希望可以做个参考。

使用Iterator接口的遍历Collection集合元素

.

  • Iterator对象成为的迭代(设计模式的一种),主要用于 遍历Collection 集合中的元素。
  • GOF给迭代器模式的定义为: 提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。 迭代器模式,就是为容器而生。类似于"公交车上的售票员"、“火车上的乘务员”、“空姐”。
  • Collection接口继承了java.lang.Iterator接口,该接口有一个iterator()方法,那么所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象。
  • Iterator仅用于遍历集合,Iterator本身并不提供承装对象的能力。如果需要创建Iterator对象,则必须有一个被迭代的集合。
  • 集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。

在这里插入图片描述

//集合元素的遍历操作,使用迭代器Iterator接口

//1. 内部方法: hasNext()和 Next()
//2. 集合对象每次调用iterator()方法都得到一个全新的迭代器对象,
//   默认游标都在集合的第一个元素之前。
//3. Iterator迭代器内部定义了remove()方法,可以在遍历的时候,删除集合中的元素。此方法不同于集合直接调用remove()。
public class iteratorTest {
    
    @Test
    public void test1(){
        Collection coll = new ArrayList();
        coll.add(1458);
        coll.add(123);
        coll.add(new Person("PePe",21));
        coll.add(new String("Tom"));

        Iterator iterator = coll.iterator();
        //方式一:
//        System.out.println(iterator.next());//1458
//        System.out.println(iterator.next());//123
//        System.out.println(iterator.next());//Person{name='PePe', age=21}
//        System.out.println(iterator.next());//Tom
//        //报错NoSuchElementException
//        System.out.println(iterator.next());

        //方式二: 不推荐
/*       for (int i = 0; i < coll.size(); i++) {
            System.out.println(iterator.next());  //1458
                                                    //123
                                                    //Person{name='PePe', age=21}
                                                    //Tom
      }
*/
        //方式三: *推荐
        //hasNext(): 判断是否还有下一个元素
        while (iterator.hasNext()){
            //next(): ①指针下移 ②将下移以后集合位置上的元素返回
            System.out.println(iterator.next());
        }
    }
}

.

Iterator迭代器的执行原理

.
在这里插入图片描述
.

迭代器Iterator遍历集合元素的两种错误写法

.

    public void test2(){
        Collection coll = new ArrayList();
        coll.add(1458);
        coll.add(123);
        coll.add(new Person("PePe",21));
        coll.add(new String("Tom"));

        Iterator iterator = coll.iterator();

        //错误方式一: 跳着输出
//        while ((iterator.next() != null)){
//            System.out.println(iterator.next());    //123 报错NoSuchElementException
 //                                                   // Tom

        //错误方式二: 一直重复输出第一个元素
        //每次调用iterator()方法都得到一个全新的迭代器对象
        while (coll.iterator().hasNext()){
            System.out.println(coll.iterator().next());//1458 1458 1458 1458  重复输出
        }
    }

.

Iterator接口的remove()方法的使用

.
在这里插入图片描述

//测试Iterator中的remove()方法

//如果还未调用next() 或 在一次调用next()方法之前调用了多次remove方法---->就会报错IllegalStateException
    @Test
    public void test3(){
        Collection coll = new ArrayList();
        coll.add(1458);
        coll.add(123);
        coll.add(new Person("PePe",21));
        coll.add(new String("Tom"));

        //删除集合中"Tom"数据
        Iterator iterator = coll.iterator();
        while (iterator.hasNext()){

//          iterator.remove();//报错IllegalStateException
            //不要在没next()之前调用remove()方法

            Object obj = iterator.next();
            if ("Tom".equals(obj)){
                iterator.remove();

//              iterator.remove();//报错IllegalStateException
                //在下一次next()之前不能调用两次remove()
            }
        }

        //遍历集合
        Iterator iterator1 = coll.iterator();
        while (iterator1.hasNext()){
            System.out.println(iterator1.next());
                                                /*
                                                1458
                                                123
                                                Person{name='PePe', age=21}
                                                 */
        }
}

最后

以上就是痴情便当最近收集整理的关于Day45.迭代器Iterator接口的使用 -Java常用类、集合#、IO使用Iterator接口的遍历Collection集合元素Iterator迭代器的执行原理迭代器Iterator遍历集合元素的两种错误写法Iterator接口的remove()方法的使用的全部内容,更多相关Day45.迭代器Iterator接口的使用内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部