• 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

     

  • 相关阅读:
    [转帖]活用Quartus II内置模板,快速输入HDL代码、TimeQuset束缚及tcl语句等
    [笔记] FPGA的发展
    [转帖]状态机的编码
    [笔记]Altera中DDR3设计
    [笔记]Test Plan的编写 及 程序开头注释
    [HDOJ2457]DNA repair
    [HDOJ2355]The Sidewinder Sleeps Tonite
    [HDOJ2825]Wireless Password
    [HDOJ2222]Keywords Search
    [HDOJ2454]Degree Sequence of Graph G
  • 原文地址:https://www.cnblogs.com/yhwsy/p/5733473.html
Copyright © 2020-2023  润新知