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异常)

  • 相关阅读:
    PAT 1007 Maximum Subsequence Sum 最大连续子序列和
    数据库系统原理课程设计——图书借阅管理系统
    计算机组成原理——数据的表示与运用
    win7系统下安装Ubuntu18.04组成双系统
    C++中set用法详解
    C++ getline函数用法详解
    数据库——关系演算
    计算机组成原理——计算机系统概述考研题
    PAT 1002 A+B for Polynomials(map模拟)
    PAT 1001 A+B Format
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9421041.html
Copyright © 2011-2022 走看看