Java 迭代器 Iterator
2023-09-11 14:14:33 时间
迭代器模式
迭代器模式(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 并发工具包 java.util.concurrent 用户指南
- Java高并发核心编程(卷1):NIO、Netty、Redis、ZooKeeper
- java - 详解 Java 17 中新推出的密封类
- Word处理控件Aspose.Words功能演示:如何在 C# 和Java中将 DOC 转换为 JSON
- Java联网3D坦克大战(网络编程)
- Java迭代器Iterator的remove()方法
- [原]使用Fiddler捕获java的网络通信数据
- Java开发环境的搭建以及使用eclipse从头一步步创建java项目
- 第九节:详细讲解Java中的泛型,多线程,网络编程
- 第七节:详细讲解Java中的日期,java.util.date
- java 多语言
- 《Java编码指南:编写安全可靠程序的75条建议》—— 指南20:使用安全管理器创建一个安全的沙盒
- 《Java学习指南》—— 1.2 虚拟机
- 《21天学通Java(第6版)》—— 1.4 属性和行为
- 【Java实习生】每日10道面试题打卡!
- Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求
- java 调整jvm堆大小上限
- Java HashMap HashSet HashTable与其遍历接口所使用的迭代器(iterator)
- Java编程常用数据转换:String与int互转、Date与String互转、BigDecimal与int比较(报错operator > cannot be applied to java.math.BigDecimal,int)
- 『Java练习生的自我修养』java-se进阶² • 并发与多线程
- 《青花瓷》JAVA版:周杰伦告诉你怎么学Java
- 实操代码研究各种Java技术-java.toutiao.im
- 在macOS 上添加 JAVA_HOME 环境变量
- the resource is not on the build path of a java project错误
- Java生成随机数几种方式
- 【Java I/O 流】文件的操作——java.io.File 类详解