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 ...
随机推荐
- Lucene 基础知识
1. 数据分类 结构化数据: 指具有固定格式或有限长度的数据,如数据库等; 非结构化数据: 指不定长或无固定格式的数据, 如邮件,word 文档等磁盘上的文件; 1.1 非结构化数据查询方法 顺序扫描 ...
- python StringIO类
python的stringIO类用来处理字符串,由于其操作类似文件操作,可以视为内存中的文件. 1.创建stringIO 2.常用操作: write,writelines.getvalue.seek. ...
- php 数值数组
<?php $cars=array("Volvo","BMW","Toyota"); echo ] . ] . ] . ". ...
- CSS再学习 之背景色 背景图片
背景色 p {background-color: gray;} 如果您希望背景色从元素中的文本向外少有延伸,只需增加一些内边距. p {background-color: gray; padding: ...
- 反射中的 Class.forName() 与 ClassLoader.loadClass() 的区别
在Java中,类加载器把一个类加载进Java虚拟机中,要经过三个步骤来完成:加载.链接和初始化,其中链接又可以分成验证.准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下 ...
- 递归--练习3--noi7592求最大公约数问题
递归--练习3--noi7592求最大公约数问题 一.心得 两个低级错误:1. ll setMax(ll &m,ll &n)中无引用,结果只传值,没传地址2. return f(n,m ...
- Android数据库升级不丢失数据解决方案
在Android开发中,sqlite至关重要,增删查改不多说,难点在于,1,并发,多个线程同时操作数据库.2,版本升级时,如果数据库表中新加了个字段,如何在不删除表的情况下顺利过渡,从而不丢失数据. ...
- java读取和写入浏览器Cookies
首先我们认识下什么是cookies: cookie实际上是一个存在你硬盘里的数据,但是这些数据很特殊,只能由web应用提交给浏览器帮助存储,并且我们还能读取浏览器存在本地的cookie web应用一般 ...
- java并发编程:线程安全管理类--原子操作类--AtomicIntegerFieldUpdater<T>
1.类 AtomicIntegerFieldUpdater<T> public abstract class AtomicIntegerFieldUpdater<T> exte ...
- 『转』谷歌发布Windows版Chrome App Launcher
据国外媒体报道,谷歌发布了Windows版Chrome App Launcher,Windows用户现在因此能够使用谷歌的许多网络应用,如Chrome浏览器.Gmail.Google Drive和Ch ...