zoukankan      html  css  js  c++  java
  • Iterator迭代器

    Iterator(java.util)

    1. 在Java中对集合有3种遍历方式
    • 普通的for循环
    • 迭代器(iterator)遍历
    • for each循环
    1. Iterator 为 Java 中的迭代器对象,该接口封装了hashNext()/next()/remove()/forEachRemaining()(1.8) 方法,对集合进行遍历的底层依赖,Iterable(java.lang) 接口是所有Collection 类的父接口,内部封装了Iterator 迭代器对象,因此集合类可以使用迭代器遍历元素。
    2. forEach 内部也是依赖于迭代器,自jdk1.8开始,为Iterable 接口中添加了默认方法forEach ,即实现该接口时,可以直接调用forEach 的增强for循环,Lambda进一步减少了模板代码。默认的spliterator() 方法为遍利和分割元素提供更便捷操作

    Iterable 与 Iterator 关系

    1. 集合类扩展了Iterable 接口 并返回 iterator 接口的实例,好处是一个集合可以再实现多个不同的Iterator 内部类,更多样的迭代规则,集合更灵活。如LinkedList中的ListItr和DescendingIterator两个内部类,就分别实现了双向遍历和逆序遍历。通过返回不同的Iterator实现不同的遍历方式,这样更加灵活。如果把两个接口合并,就没法返回不同的Iterator实现类了。

    Iterable 类图

    Iterator 类图

    注意

    • 所有实现Iterator 接口的子类,如果想要查看集合中的所有子类元素应该先调用hashNext():boolean 方法,返回true时,才能反复调用next():E 方法
    • 调用remove() 方法,它会返回上一个调用next()方法的对象的引用,即remove()方法实际上删除集合中的一个元素是先用next()方法跳过元素然后进行删除的。如果删除两个相邻的元素,正确步骤 remove();next();remove() 重复步骤太多,因此在jdk1.8版本在接口中提供了forEachRemaining() 方法
    • forEachRemaining() 方法提供了null值判断,封装了hashNext()与next() 方法,利用Lambda表达式进行函数式接口调用,可以在任何类中直接使用更简洁的语法对元素进行访问操作。Lambda 大法 NB
      default void forEachRemaining(Consumer<? super E> action) {
          Objects.requireNonNull(action);
          while (hasNext())
              action.accept(next());
      }
      
  • 相关阅读:
    Weak Events in C#【译】
    Architecture
    在VS2012中使用NuGet引入Prism
    UIA Verify简介(未完待续)
    inspect无法抓到窗口控件详细信息
    从CSDN搬至博客园
    VC改变CListCtrl 表格中文字颜色,和背景颜色。
    vc 播放音乐
    VC字体对话框的初始化
    javac -cp java -cp
  • 原文地址:https://www.cnblogs.com/luckyCoder/p/12733095.html
Copyright © 2011-2022 走看看