zoukankan      html  css  js  c++  java
  • 迭代器模式在 Java 容器中的实现

    • 迭代器接口是迭代器模式实现的精髓:

      public interface Iterator<E> {
          boolean hasNext();
              E next();
              ...
      }        
    • 假设某容器名为 XxCollection(该类本身并不需实现 Iterator 接口),调用其迭代器遍历访问其所有成员时,一般是通过其 iterator() 方法(Java 容器类如 ArrayList/LinkedList 下的 iterator 也是如下所示)

      public class XxCollection<E> {
          public Iterator<E> iterator() {
              return new Iter();
          }
      }

      而 Iter 类是 XxCollection 类内的私有类:

      private class Itr implements Iterator<E> { 
          public boolean hasNext() {
              ....
          }
          public E next() {
              ....
          }
      }

    1. Iterator 与 Iterable

    • Iterator

      package java.util;
      
      public interface Iterator<E> {
          boolean hasNext();
          E next();
          void remove();
      }
    • Iterable

      package java.lang;
      import java.util.Iterator;
      
      public Interface Iterable<T> {
          Iterator<T> iterator();
      }

    2. 如何在 java 容器中使用迭代器

    // 两个不同的 List 子类
    List<String> list = new ArrayList<String>();
    List<String> linkList = new LinkedList<String>();
    
    void iterate(List<String> list) {
        Iterator<String> iter = list.iterator();
        while (iter.hasNext()) {
            ....
        }
    }
    

    3. Iterator 遍历时不可以删除集合中的元素

    在使用Iterator的时候禁止对所遍历的容器进行改变其大小结构的操作。例如: 在使用Iterator进行迭代时,如果对集合进行了add、remove操作就会出现ConcurrentModificationException异常。

    因为在你迭代之前,迭代器已经被通过list.itertor()创建出来了,如果在迭代的过程中,又对list进行了改变其容器大小的操作,那么Java就会给出异常。因为此时Iterator对象已经无法主动同步list做出的改变,Java会认为你做出这样的操作是线程不安全的,就会给出善意的提醒(抛出ConcurrentModificationException异常)

  • 相关阅读:
    看起来像一个输入框的input,实际上是有两个input
    Actions类的一些主要方法
    selenium通过WebDriverWait实现ajax测试,实现等页面元素加载完成
    如何判断新打开窗口是否需要切换
    鼠标悬停
    Selenium WebDriver使用IE浏览器
    Element should have been select but was input
    58同城Java面试
    2个线程ABAB或者BABA循环输出
    使多个线程循环输出099099
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9421041.html
Copyright © 2011-2022 走看看