java 学习笔记 Iterator 迭代器

一.Itertor接口介绍

  • Iterator是专门的迭代输出接口,就是将元素一个个进行判断,如果有内容则把内容取出。
  • 在集合类的输出时必须形成一个思路,就是只要碰到了集合输出的操作,就一定要使用Iterator 接口,这是最标准的做法。
  • 凡是Collection类都实现了Iterator接口的方法。

    二.Itertor接口操作

    使用Itertor 进行集合的输出和删除

    import java.util.Iterator;
    import java.util.HashSet;
    public class Test {
      public static void main(String[] args) {
        HashSet<String> str = new HashSet<String>();
        str.add("IBM");
        str.add("Oracle");
        str.add("Apple");
        str.add("MicroSoft");
        str.add("Google");
      
        Iterator<String> ite = str.iterator();
        while(ite.hasNext()) {
           System.out.print(ite.next() + " "); 
        }
        System.out.println(" ");
          
        //ite = str.iterator();
        for(ite = str.iterator();ite.hasNext();) {
            System.out.print(ite.next() + " ");  
        }
            System.out.println(" ");
      
        String exa = "Apple";
        ite = str.iterator();
        while(ite.hasNext()) {
            if(ite.next().equals(exa)) {
                ite.remove();   
            }   
        }
        System.out.println(str); 
          
      }
    }
      
    /*
    错误之处:
        1.Iterator不是itertor;
        2.//Itertor<String> ite = new str.Iteror<String>();
    */

    上面的程序中Iterator泛型使用与不使用的区别:

        1.使用泛型时

  • import java.util.Iterator;
    import java.util.HashSet;
    public class Test {
      public static void main(String[] args) {
        HashSet<Person> per = new HashSet<Person>();
        per.add(new Person(21,"一"));
        per.add(new Person(22,"二"));
        per.add(new Person(23,"三"));
        
        new Person(21,"一").printName();
        System.out.println(" ");
        
        Iterator<Person> iteper1 = per.iterator();
        iteper1.next().printName();
        iteper1.next().printName();
        iteper1.next().printName();
        System.out.println(" ");
        
        iteper1 = per.iterator();
        while(iteper1.hasNext()) {
            iteper1.next().printName();
            //iteper1.next().printName();//iterater每执行一次,光标就会向后移一位。在上一句中光标已经移一位了。    
        }
        System.out.println(" ");
      }  
    }
      
    class Person{
        int age;
        String name;
          
        Person(int age,String name) {
            this.age = age;
            this.name = name; 
        }   
          
        public boolean equals(Object obj) {
            if(obj instanceof Person) {
                Person p = (Person)obj;
                if(this.age == p.age && this.name.equals(p.name)) {
                    return true;
                }   
            }   
            if (this == obj) {
            return true;    
        }
            return false;
       }
        
      public String toString() {
          return this.name + this.age;    
      }
      
      public void printName() {
          System.out.print(this.name);    
      }
          
    }
    
    /*
    1.iterater每执行一次,光标就会向后移一位。
    */

r1

2.不使用Iterator泛型:

public static void main(String[] args) {
    HashSet<Person> per = new HashSet<Person>();
    per.add(new Person(21,"一"));
    per.add(new Person(22,"二"));
    per.add(new Person(23,"三"));
    
    new Person(21,"一").printName();
    System.out.println(" ");
    
    Iterator iteper1 = per.iterator();
    iteper1.next().printName();
    iteper1.next().printName();
    iteper1.next().printName();
    System.out.println(" ");
    
    iteper1 = per.iterator();
    while(iteper1.hasNext()) {
        iteper1.next().printName();
        //iteper1.next().printName();//iterater每执行一次,光标就会向后移一位。在上一句中光标已经移一位了。    
    }
    System.out.println(" ");
  }  
}

r2

当不使用iterater泛型时,返回来的值是默认类型为Object

import java.util.Iterator;
import java.util.HashSet;
public class Test {
  public static void main(String[] args) {
    HashSet<Person> per = new HashSet<Person>();
    per.add(new Person(21,"一"));
    per.add(new Person(22,"二"));
    per.add(new Person(23,"三"));
    
    new Person(21,"一").printName();
    System.out.println(" ");
    
    Iterator iteper1 = per.iterator();
    ((Person)iteper1.next()).printName();
    ((Person)iteper1.next()).printName();
    ((Person)iteper1.next()).printName();
    System.out.println(" ");
    
  }  
}

把Object类强制转换成Person类才能使用Per类的方法

r3

 

posted @ 2016-08-03 16:40  鱼虎纹鲨鱼  阅读(300)  评论(0编辑  收藏  举报