Iterator迭代器
1. Iterator接口
java.util.Iterator接口作用:遍历集合中的所有元素。
Iterator和Collection、Map接口有所不同:
Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被成为迭代器。
Collection、Map接口主要用于存储元素。
获取迭代器的方法:
public Iterator iterator() // 获取集合对应的迭代器,用来遍历集合中的元素
迭代的概念:
迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续再判断,如果还有就再取出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
Iterator接口的常用方法如下:
1 public E next() // 返回迭代的下一个元素 2 public boolean hasNext() // 如果仍有元素可以迭代,则返回true
代码实例
1 public class Demo06 { 2 public static void main(String[] args){ 3 Collection coll = new ArrayList(); 4 5 coll.add("小明"); 6 coll.add("小红"); 7 coll.add("小刚"); 8 System.out.println(coll); 9 10 Iterator it = coll.iterator(); 11 if(it.hasNext()){ 12 for(int i=0; i<coll.size(); i++){ 13 System.out.print(it.next() + " "); 14 } 15 } 16 } 17 }
/*
tips::在进行集合元素取出时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会发生java.util.NoSuchElementException没有集合元素的错误。
*/
运行结果
[小明, 小红, 小刚]
小明 小红 小刚
2. 迭代器的实现原理
我们在之前案例已经完成了Iterator遍历集合的整个过程。当遍历集合时,首先通过调用集合的iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。
Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,为了让初学者能更好地理解迭代器的工作原理,接下来通过一个图例来演示Iterator对象迭代元素的过程:
在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,指向第一个元素,当第一次调用迭代器的next方法时,返回第一个元素,然后迭代器的索引会向后移动一位,指向第二个元素,当再次调用next方法时,返回第二个元素,然后迭代器的索引会再向后移动一位,指向第三个元素,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。
3.使用Iterator迭代器删除元素
java.util.Iterator迭代器中有一个方法:
void remove();
注意:Collection的remove方法,无法根据条件删除。
【例】删除一下集合元素中的偶数
1 public class Demo10 { 2 public static void main(String[] args){ 3 Collection coll = new ArrayList(); 4 coll.add(1); 5 coll.add(2); 6 coll.add(3); 7 coll.add(4); 8 coll.add(5); 9 System.out.println(coll); 10 11 Iterator iterator = coll.iterator(); 12 while(iterator.hasNext()){ 13 Integer s = (Integer)iterator.next(); 14 if(s%2==0){ 15 iterator.remove(); 16 } 17 } 18 System.out.println(coll); 19 } 20 }
运行结果:
[1, 2, 3, 4, 5]
[1, 3, 5]
4. 增强for
增强for循环(也称foe each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。
格式:
for(元素的数据类型 变量 : Collection集合or数组){ //写操作代码 }
练习1:遍历数组
通常只进行遍历元素,不要在遍历的过程中对数组元素进行修改。
public class NBForDemo1 { public static void main(String[] args) { int[] arr = {3,5,6,87}; //使用增强for遍历数组 for(int a : arr){//a代表数组中的每个元素 System.out.println(a); } } }
练习2:遍历集合
通常只进行遍历元素,不要再遍历的过程中对集合元素斤进行增加、删除、替换操作。
1 public class Demo11 { 2 public static void main(String[] args){ 3 Collection coll = new ArrayList(); 4 coll.add("小明"); 5 coll.add("小红"); 6 coll.add("小刚"); 7 System.out.println(coll); 8 9 for(Object x : coll){ 10 String s = (String)x; 11 System.out.println(x); 12 } 13 } 14 }
运行结果:
1 [小明, 小红, 小刚] 2 小明 3 小红 4 小刚
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南