集合遍历(迭代器遍历---以及注意问题---集合的使用步骤)
erator iterator():迭代器,集合的专用遍历方式 9 * Object next():获取元素,并移动到下一个位置。 10 * NoSuchElementException:没有这样的元素,因为你已经找到最后了。 11 * boolean hasNext():如果仍有元素可以迭代,则返回 true。---进行判断的语句
整体演示代码
注意:如果接受的对象是一个接口---则实际返回的肯定是子类的对象---多态--代码26行
集合的使用步骤
A:创建集合对象
B:创建元素对象
C:将元素添加到集合对象
D:进行迭代器的遍历
E:利用集合对象,创建迭代器对象
F:利用迭代器对象的hasNext()来进行遍历元素的判断
G:利用迭代器对象的next()方法来进行获取遍历的数据
1 package cn.itcast_03; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 import java.util.Iterator; 6 7 /* 8 * Iterator iterator():迭代器,集合的专用遍历方式 9 * Object next():获取元素,并移动到下一个位置。 10 * NoSuchElementException:没有这样的元素,因为你已经找到最后了。 11 * boolean hasNext():如果仍有元素可以迭代,则返回 true。( 12 */ 13 public class IteratorDemo { 14 public static void main(String[] args) { 15 // 创建集合对象 16 Collection c = new ArrayList(); 17 18 // 创建并添加元素 19 // String s = "hello"; 20 // c.add(s); 21 c.add("hello"); 22 c.add("world"); 23 c.add("java"); 24 25 // Iterator iterator():迭代器,集合的专用遍历方式 26 Iterator it = c.iterator(); // 实际返回的肯定是子类对象,这里是多态 27 28 // Object obj = it.next(); 29 // System.out.println(obj); 30 // System.out.println(it.next()); 31 // System.out.println(it.next()); 32 // System.out.println(it.next()); 33 // System.out.println(it.next()); 34 // 最后一个不应该写,所以,我们应该在每次获取前,如果有一个判断就好了 35 // 判断是否有下一个元素,有就获取,没有就不搭理它 36 37 // if (it.hasNext()) { 38 // System.out.println(it.next()); 39 // } 40 // if (it.hasNext()) { 41 // System.out.println(it.next()); 42 // } 43 // if (it.hasNext()) { 44 // System.out.println(it.next()); 45 // } 46 // if (it.hasNext()) { 47 // System.out.println(it.next()); 48 // } 49 // if (it.hasNext()) { 50 // System.out.println(it.next()); 51 // } 52 53 // 最终版代码 54 while (it.hasNext()) { 55 // System.out.println(it.next()); 56 String s = (String) it.next(); 57 System.out.println(s); 58 } 59 } 60 }
自定义对象通过迭代器进行遍历
1 package Day15; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 import java.util.Iterator; 6 7 /* 8 * Iterator iterator():迭代器,集合的专用遍历方式 9 * Object next():获取元素,并移动到下一个位置。 10 * NoSuchElementException:没有这样的元素,因为你已经找到最后了。 11 * boolean hasNext():如果仍有元素可以迭代,则返回 true。( 12 * */ 13 //练习:用集合存储5个学生对象,并把学生对象进行遍历。用迭代器遍历。 14 public class Lx2 { 15 public static void main(String[] args) { 16 //首先创建集合对象 17 Collection ss = new ArrayList(); 18 19 //创建五个学生类对象 20 Student2 A = new Student2("小明",23); 21 Student2 B = new Student2("小兰",24); 22 Student2 C = new Student2("小黑",25); 23 Student2 E = new Student2("小白",26); 24 Student2 F= new Student2("小紫",27); 25 26 //向集合对象内添加这五个同学的信息 27 ss.add(A); 28 ss.add(B); 29 ss.add(C); 30 ss.add(E); 31 ss.add(F); 32 33 //进行使用集合专用的遍历--迭代遍历 34 //Iterator iterator():迭代器,集合的专用遍历方式 35 Iterator SM = ss.iterator(); 36 //Object next():获取元素,并移动到下一个位置。 37 //Object sss =SM.next(); 38 // System.out.println(sss); 39 //进行循环遍历输出--并提供其判断的条件---boolean hasNext():如果仍有元素可以迭代,则返回 true。( 40 while(SM.hasNext()){ 41 //进行类型的转化--来调用学生类中的方法操作获取 42 //将获取的集合中的数据进行类型转化为Student2类型的数据--相当于创建了一个学生类对象 43 Student2 M = (Student2) SM.next(); 44 System.out.println(M.getName()+"---"+M.getAge()); 45 46 //System.out.println(SM.next()); 47 } 48 } 49 }
迭代器遍历注意的问题:
1 package cn.itcast_03; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 import java.util.Iterator; 6 7 /* 8 * 问题1:能用while循环写这个程序,我能不能用for循环呢? 9 * 问题2:不要多次使用it.next()方法,因为每次使用都是访问一个对象。 10 */ 11 public class IteratorTest2 { 12 public static void main(String[] args) { 13 // 创建集合对象 14 Collection c = new ArrayList(); 15 16 // 创建学生对象 17 Student s1 = new Student("林青霞", 27); 18 Student s2 = new Student("风清扬", 30); 19 Student s3 = new Student("令狐冲", 33); 20 Student s4 = new Student("武鑫", 25); 21 Student s5 = new Student("刘晓曲", 22); 22 23 // 把学生添加到集合中 24 c.add(s1); 25 c.add(s2); 26 c.add(s3); 27 c.add(s4); 28 c.add(s5); 29 30 // 遍历 31 Iterator it = c.iterator(); 32 while (it.hasNext()) { 33 Student s = (Student) it.next(); 34 System.out.println(s.getName() + "---" + s.getAge()); 35 36 // NoSuchElementException 不要多次使用it.next()方法 37 // System.out.println(((Student) it.next()).getName() + "---" 38 // + ((Student) it.next()).getAge()); 39 40 } 41 // System.out.println("----------------------------------"); 42 43 // for循环改写 44 // for(Iterator it = c.iterator();it.hasNext();){ 45 // Student s = (Student) it.next(); 46 // System.out.println(s.getName() + "---" + s.getAge()); 47 // } 48 } 49 }
分类:
对象数组和集合
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?