首页 > 代码库 > java 15-4 集合的专用遍历工具 迭代器

java 15-4 集合的专用遍历工具 迭代器

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()+"\t"+a.getColor()+"\t"+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()+"\t"+a.getColor()+"\t"+a.getAge());53         //}54     }55 56 }

 

java 15-4 集合的专用遍历工具 迭代器