Java 迭代器 Iterator
迭代器模式
迭代器模式(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
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的更多相关文章
- 设计模式 - 迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释
迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考迭代器模式(ite ...
- [转载]Java迭代器(iterator详解以及和for循环的区别)
Java迭代器(iterator详解以及和for循环的区别) 觉得有用的话,欢迎一起讨论相互学习~[Follow] 转载自 https://blog.csdn.net/Jae_Wang/article ...
- Java迭代器Iterator
之前我们实现了迭代器模式,很多编程语言实际上已经内置了迭代器类,比如Java就为我们实现了迭代器Iterator.我们首先来看Iterator中的源码. 通过JDK源码我们发现Iterator是一个接 ...
- java 迭代器iterator
对于如ArrayList<E>类的数据,常用iterator遍历. ArrayList<String> list = new ArrayList<String>() ...
- Java 迭代器综述
一.摘要 迭代器模式是与集合共生共死的.一般来说.我们仅仅要实现一个容器,就须要同一时候提供这个容器的迭代器.使用迭代器的优点是:封装容器的内部实现细节,对于不同的集合,能够提供统一的遍历方式,简化c ...
- JAVA ,Map接口 ,迭代器Iterator
1. Map 接口概述 java.util.Map 接口描述了映射结构, Map 接口允许以键集.值集合或键 - 值映射关系集的形式查看某个映射的内容. Java 自带了各种 Map 类. 这些 ...
- Java之iterator迭代器和iterable接口
java.lang.Iterable java.util.Iterator Iterator是迭代器类,而Iterable是接口. 好多类都实现了Iterable接口,这样对象就可以调用iterato ...
- Java 实现迭代器(Iterator)模式
类图 /** * 自己定义集合接口, 相似java.util.Collection * 用于数据存储 * @author stone * */ public interface ICollection ...
- java基础知识5--集合类(Set,List,Map)和迭代器Iterator的使用
写的非常棒的一篇总结: http://blog.csdn.net/speedme/article/details/22398395#t1 下面主要看各个集合如何使用迭代器Iterator获取元素: 1 ...
随机推荐
- Linux环境下如何配置IP地址、MAC地址
Linux环境下如何配置IP地址.MAC地址 1.配置IP地址 进入配置IP地址路径,进行修改即可 cd /etc/network vim interface 加入以下内容: iface eth0 i ...
- Helm - Error: cannot connect to Tiller
helm2.9.1报错 [root@master ~]# helm version Client: &version.Version{SemVer:"v2.9.1", Gi ...
- Ant Design of Angular
1.按照官方的方法,报了这个 node_modules/rxjs/internal/types.d.ts(81,74): error TS1005: ';' expected.node_modules ...
- hdu 4348 To the moon 主席树区间更新
To the moon Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Prob ...
- 【Python】远离 Python 最差实践,避免挖坑
原文链接:http://blog.guoyb.com/2016/12/03/bad-py-style/ 最近在看一些陈年老系统,其中有一些不好的代码习惯遗留下来的坑:加上最近自己也写了一段烂代码导致服 ...
- 利用Minhash和LSH寻找相似的集合(转)
问题背景 给出N个集合,找到相似的集合对,如何实现呢?直观的方法是比较任意两个集合.那么可以十分精确的找到每一对相似的集合,但是时间复杂度是O(n2).当N比较小时,比如K级,此算法可以在接受的时间范 ...
- npm package.json中的dependencies和devDependencies的区别
转载:http://www.cnblogs.com/jes_shaw/p/4497836.html 一个node package有两种依赖,一种是dependencies一种是devDependenc ...
- 雷林鹏分享:Ruby Web Services 应用 - SOAP4R
Ruby Web Services 应用 - SOAP4R 什么是 SOAP? 简单对象访问协议(SOAP,全写为Simple Object Access Protocol)是交换数据的一种协议规范. ...
- IDEAL葵花宝典:java代码开发规范插件 GenerateAllSetter、ECtranslation、translation、插件
前言: GenerateAllSetter: 我们在程序开发过程中,往往要编写这样的类:类的部分或者全部属性不希望让外部世界直接访问,而不用public字段修饰.这样,方法调用成了访问这些属性的唯一 ...
- ASP.NET ValidationSummary 控件
ASP.NET ValidationSummary 控件 Validation 服务器控件 定义和用法 ValidationSummary 控件用于在网页.消息框或在这两者中内联显示所有验证错误的摘要 ...