Iterator iterator():迭代器,集合的专用遍历方式
A:Object next():获取元素,并移动到下一个位置。
有时候会出现这样的错误: NoSuchElementException:没有这样的元素,因为你已经找到最后了。
B:boolean hasNext():如果仍有元素可以迭代,则返回 true。
问题1:能用while循环写这个程序,我能不能用for循环呢?
for(Iterator it = c.iterator();it.hasNext();){
Student s = (Student) it.next();
System.out.println(s.getName() + "---" + s.getAge());
}
可以,并且for循环的效率高,因为这个循环用完后,it就被丢弃了,省内存。但是for循环语句不大明朗
问题2:不要多次使用it.next()方法,
因为每次使用都是访问一个对象。
迭代器的使用:
1 import java.util.ArrayList; 2 import java.util.Collection; 3 import java.util.Iterator; 4 public class IteratorDemo { 5 public static void main(String[] args) { 6 // 创建集合对象 7 Collection c = new ArrayList(); 8 9 // 创建并添加元素 10 // String s = "hello"; 11 // c.add(s); 12 c.add("hello"); 13 c.add("world"); 14 c.add("java"); 15 16 // Iterator iterator():迭代器,集合的专用遍历方式 17 Iterator it = c.iterator(); // 实际返回的肯定是子类对象,这里是多态 18 19 // Object obj = it.next(); 20 // System.out.println(obj); 21 // System.out.println(it.next()); 22 // System.out.println(it.next()); 23 // System.out.println(it.next()); 24 // System.out.println(it.next()); 25 // 最后一个不应该写,所以,我们应该在每次获取前,如果有一个判断就好了 26 // 判断是否有下一个元素,有就获取,没有就不搭理它 27 28 // if (it.hasNext()) { 29 // System.out.println(it.next()); 30 // } 31 // if (it.hasNext()) { 32 // System.out.println(it.next()); 33 // } 34 // if (it.hasNext()) { 35 // System.out.println(it.next()); 36 // } 37 // if (it.hasNext()) { 38 // System.out.println(it.next()); 39 // } 40 // if (it.hasNext()) { 41 // System.out.println(it.next()); 42 // } 43 44 // 最终版代码 45 while (it.hasNext()) { 46 // System.out.println(it.next()); 47 String s = (String) it.next(); 48 System.out.println(s); 49 } 50 } 51 }
用迭代器来写重新写上个遍历
1 package zl_ObjectTest1; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 import java.util.Iterator; 6 7 /* 8 用集合存储5个动物对象,并把动物对象进行遍历,用迭代器遍历 9 10 */ 11 public class AnimalDemo { 12 13 public static void main(String[] args) { 14 //创建集合对象 15 Collection c = new ArrayList(); 16 17 //创建动物对象 18 19 Animal a1 = new Animal("猫", "虎纹",2); 20 Animal a2 = new Animal("荷兰猪", "粉色",1); 21 Animal a3 = new Animal("老鹰", "黑白",4); 22 Animal a4 = new Animal("鹦鹉", "五颜六色",2); 23 Animal a5 = new Animal("警犬", "黑色", 3); 24 25 //把对象放进去集合中 26 c.add(a1); 27 c.add(a2); 28 c.add(a3); 29 c.add(a4); 30 c.add(a5); 31 32 // Iterator iterator():迭代器,集合的专用遍历方式 33 Iterator it = c.iterator(); 34 while (it.hasNext()){ 35 //System.out.println(it.next()); 36 37 //向下转型 38 Animal a = (Animal)it.next(); 39 System.out.println(a.getName()+" "+a.getColor()+" "+a.getAge()); 40 41 // NoSuchElementException 不要多次使用it.next()方法 42 // System.out.println(((Student) it.next()).getName() + "---" 43 // + ((Student) it.next()).getAge()); 44 // 错误的用法 45 //((Student) it.next()).getName()拿的是第一个的名字, 46 //((Student) it.next()).getAge()拿的是第二个的年龄... 47 } 48 49 //改为for循环方法来遍历: 50 //for(Iterator it = c.iterator();it.hasNext();){ 51 //Animal a = (Animal)it.next(); 52 //System.out.println(a.getName()+" "+a.getColor()+" "+a.getAge()); 53 //} 54 } 55 56 }