迭代器模式

迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。

迭代器模式属于行为型模式。

Java手册

java.lang
接口 Iterable<T>

所有已知子接口:
BeanContext, BeanContextServices, BlockingDeque<E>, BlockingQueue<E>, Collection<E>, Deque<E>, List<E>, NavigableSet<E>, Queue<E>, Set<E>, SortedSet<E>
所有已知实现类:
AbstractCollection, AbstractList, AbstractQueue, AbstractSequentialList, AbstractSet, ArrayBlockingQueue, ArrayDeque, ArrayList, AttributeList, BatchUpdateException, BeanContextServicesSupport, BeanContextSupport, ConcurrentLinkedQueue, ConcurrentSkipListSet, CopyOnWriteArrayList, CopyOnWriteArraySet, DataTruncation, DelayQueue, EnumSet, HashSet, JobStateReasons, LinkedBlockingDeque, LinkedBlockingQueue, LinkedHashSet, LinkedList, PriorityBlockingQueue, PriorityQueue, RoleList, RoleUnresolvedList, RowSetWarning, SerialException, ServiceLoader, SQLClientInfoException, SQLDataException, SQLException, SQLFeatureNotSupportedException, SQLIntegrityConstraintViolationException, SQLInvalidAuthorizationSpecException, SQLNonTransientConnectionException, SQLNonTransientException, SQLRecoverableException, SQLSyntaxErrorException, SQLTimeoutException, SQLTransactionRollbackException, SQLTransientConnectionException, SQLTransientException, SQLWarning, Stack, SyncFactoryException, SynchronousQueue, SyncProviderException, TreeSet, Vector

public interface Iterable<T>

实现这个接口允许对象成为 "foreach" 语句的目标。

从以下版本开始:
1.5

方法摘要
 Iterator<T> iterator()
          返回一个在一组 T 类型的元素上进行迭代的迭代器。
方法详细信息

iterator

Iterator<T> iterator()
返回一个在一组 T 类型的元素上进行迭代的迭代器。

返回:
一个迭代器。

java.util
接口 Iterator<E>

所有已知子接口:
ListIterator<E>, XMLEventReader
所有已知实现类:
BeanContextSupport.BCSIterator, EventReaderDelegate, Scanner

public interface Iterator<E>

对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:

  • 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
  • 方法名称得到了改进。

此接口是 Java Collections Framework 的成员。

从以下版本开始:
1.2
另请参见:
Collection, ListIterator, Enumeration

方法摘要
 boolean hasNext()
          如果仍有元素可以迭代,则返回 true
 E next()

返回迭代的下一个元素。

 void remove()

从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

Iterator  是一个强大的工具,他可以迭代集合框架里面的所有子接口里实现的集合

迭代其实就是一种遍历的方式。

实例:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator; public class IteratorDemo {
public static void main(String[] args) { // 用List接口的一个子类ArrayList进行实现
List<String> list = new ArrayList<>();
list.add("老王");
list.add("老李");
list.add("老张");
list.add("老李");
list.add("老丁");
list.add("老孙"); // 下面我们开始遍历输出这个数组列表
// 1.for循环遍历
for(int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + ", ");
}
System.out.println();// 换行 // 2.foreach循环遍历这个数组
for(String s : list) {
System.out.print(s + ", ");
}
System.out.println();// 换行 // 3.迭代器遍历
/**
* 迭代器的使用方法比较固定
* 首先创建一个迭代器
* 然后判断迭代器指向的列表有没有迭代的元素:it.hasNext()
* 如果有,就遍历出来:it.next()
*/
Iterator<String> it = list.iterator();
while(it.hasNext()) {
System.out.print(it.next() + ", ");
}
System.out.println(); // 4.ListIterator 增强型迭代器
ListIterator<String> Lit1 = list.listIterator();
while(Lit1.hasNext()) {
System.out.print(Lit1.next() + ", ");
}
System.out.println(); /**
* ListIterator与传统迭代器的区别
* 1.ListIterator不止可以向后访问,还可以向前访问
* 2.ListIterator可以修改集合里的元素
*/
// ListIterator 从后向前遍历列表
ListIterator<String> Lit2 = list.listIterator();
while(Lit2.hasPrevious()) {
System.out.println(Lit2.previous() + ", ");
}
System.out.println(); // ListIterator 修改列表里面的元素
ListIterator<String> Lit3 = list.listIterator(3);
if(Lit3.hasPrevious()) {
Lit3.previous();
Lit3.set("cjj");
}
System.out.println(list + " "); // 通过迭代器自带的remove方法来移除当前在迭代的元素
Iterator<String> it1 = list.iterator();
// 判断是否有下一个元素
if(it1.hasNext()){
it.remove();
}
System.out.println(list);
}
}

运行结果:

老王, 老李, 老张, 老李, 老丁, 老孙,
老王, 老李, 老张, 老李, 老丁, 老孙,
老王, 老李, 老张, 老李, 老丁, 老孙,
老王, 老李, 老张, 老李, 老丁, 老孙, [老王, 老李, cjj, 老李, 老丁, 老孙]
[老王, 老李, cjj, 老李, 老丁]

Java 迭代器 Iterator的更多相关文章

  1. 设计模式 - 迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释

    迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考迭代器模式(ite ...

  2. [转载]Java迭代器(iterator详解以及和for循环的区别)

    Java迭代器(iterator详解以及和for循环的区别) 觉得有用的话,欢迎一起讨论相互学习~[Follow] 转载自 https://blog.csdn.net/Jae_Wang/article ...

  3. Java迭代器Iterator

    之前我们实现了迭代器模式,很多编程语言实际上已经内置了迭代器类,比如Java就为我们实现了迭代器Iterator.我们首先来看Iterator中的源码. 通过JDK源码我们发现Iterator是一个接 ...

  4. java 迭代器iterator

    对于如ArrayList<E>类的数据,常用iterator遍历. ArrayList<String> list = new ArrayList<String>() ...

  5. Java 迭代器综述

    一.摘要 迭代器模式是与集合共生共死的.一般来说.我们仅仅要实现一个容器,就须要同一时候提供这个容器的迭代器.使用迭代器的优点是:封装容器的内部实现细节,对于不同的集合,能够提供统一的遍历方式,简化c ...

  6. JAVA ,Map接口 ,迭代器Iterator

    1.    Map 接口概述 java.util.Map 接口描述了映射结构, Map 接口允许以键集.值集合或键 - 值映射关系集的形式查看某个映射的内容. Java 自带了各种 Map 类. 这些 ...

  7. Java之iterator迭代器和iterable接口

    java.lang.Iterable java.util.Iterator Iterator是迭代器类,而Iterable是接口. 好多类都实现了Iterable接口,这样对象就可以调用iterato ...

  8. Java 实现迭代器(Iterator)模式

    类图 /** * 自己定义集合接口, 相似java.util.Collection * 用于数据存储 * @author stone * */ public interface ICollection ...

  9. java基础知识5--集合类(Set,List,Map)和迭代器Iterator的使用

    写的非常棒的一篇总结: http://blog.csdn.net/speedme/article/details/22398395#t1 下面主要看各个集合如何使用迭代器Iterator获取元素: 1 ...

随机推荐

  1. 强连通分量(Korasaju & Tarjan)学习笔记

    好久以前学过的东西...现在已经全忘了 很多图论问题需要用到强连通分量,还是很有必要重新学一遍的 强连通分量(Strongly Connected Component / SCC) 指在一个有向图中, ...

  2. TensorFlow实现FM

    看了网上的一些用tf实现的FM,很多都没有考虑FM实际使用中数据样本稀疏的问题. 我在实现的时候使用 embedding_lookup_sparse来解决这个问题. 对于二阶部分,由于embeddin ...

  3. Android之获取输入用户名与密码发送短信

    打算在过两三天的时间我就要准备出发去浙江了,所以把之前的资料来个总结. 这都是在课堂上做过的作业. 好了,废话少说,直接上代码. 步骤: 1.设置单击事件2.获取输入的QQ号码与密码3.判断输入获取的 ...

  4. Linux命令详解-type

    type命令用来显示指定命令的类型. 一个命令的类型可以是如下之一     alias     别名     keyword 关键字,Shell保留字     function 函数,Shell函数 ...

  5. HDU1565 方格取数 &&uva 11270 轮廓线DP

    方格取数(1) Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  6. ps怎么替换颜色

    1.图像--->>调整--->>替换颜色

  7. 004PHP文件处理——目录操作:glob rewinddir opendir readdir

    <?php /** * 目录操作:glob rewinddir opendir readdir */ //glob 以数组形式返回,参数1这个目录的所有内容,可以置顶返回的具体类型 //只遍历输 ...

  8. qt Cannot connect creator comm socket /tmp/qt_temp.S26613/stub-socket: No such

    Tool->Options->Environment->General 将terminal改为 xterm -e

  9. 多线程pre

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  10. Jacoco的原理

    覆盖率计数器 Jacoco使用一系列的不同的计数器来做覆盖率的度量计算.所有这些计数器都是从java的class文件中获取信息,这些class文件可以(可选)包含调试的信息在里面.即使在没有源码的情况 ...