迭代器模式

迭代器模式(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. HDU 6354 Everything Has Changed(余弦定理)多校题解

    题意:源点处有个圆,然后给你m个圆(保证互不相交.内含),如果源点圆和这些原相交了,就剪掉相交的部分,问你最后周长(最外面那部分的长度). 思路:分类讨论,只有内切和相交会变化周长,然后乱搞就行了.题 ...

  2. JVM的反射实现

    java的反射机制 java的反射机制是在运行状态中,对于任意一个类(Class)都能知道他的属性(Field)和方法(Method),对于任意一个对象都能够调用它的方法和属性:这种动态获取信息以及动 ...

  3. Gym 101243E Cupcakes

    http://codeforces.com/gym/101243/attachments 题意: 有n个人,桌子上有k的蛋糕,每个人都有一个值val,表示每次轮到他吃蛋糕时,他可以吃1~val的蛋糕量 ...

  4. LA 6891 Money Transfers(最短路)

    https://vjudge.net/problem/UVALive-6891 题意: 给定一个加权无向图,还有起点和终点,现在有个SWERC公司,拥有图中的m个顶点,现在可以使图中的每一条边都加上k ...

  5. 怎样绕开QQ通讯录和360的广播中断

    http://www.eoeandroid.com/thread-148381-1-1.html 最近在网上搜索怎样绕开QQ通讯录和360的广播中断,在它们之前拿到短信,结果很遗憾没有搜索到什么东西, ...

  6. TCGA下载神器--TCGAbiolinks

    http://bioconductor.org/packages/devel/bioc/vignettes/TCGAbiolinks/inst/doc/tcgaBiolinks.html#gdcque ...

  7. css3伪放大镜(图片放大动画)效果(鼠标移入圆形区域放大图片)

    源码: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&q ...

  8. Idea2018激活

    [help]-->[register]-->[license server]-->输入下方链接 http://xdouble.cn:8888/ 如果不行,请用下面的这个: http: ...

  9. Granting and Managing Item Level Permission using SharePoint2013 Designer Workflow

    https://gnanasivamgunasekaran.wordpress.com/2015/12/29/granting-and-managing-item-level-permission-u ...

  10. 124. Binary Tree Maximum Path Sum *HARD* -- 二叉树中节点和最大的路径的节点和

    Given a binary tree, find the maximum path sum. For this problem, a path is defined as any sequence ...