zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    Mac上的USB存储设备使用痕迹在新版操作系统有所变化
    Beware of the encrypted VM
    A barrier for Mobile Forensics
    Second Space could let suspect play two different roles easily
    Take advantage of Checkra1n to Jailbreak iDevice for App analysis
    Find out "Who" and "Where"
    Where is the clone one and how to extract it?
    Downgrade extraction on phones running Android 7/8/9
    高版本安卓手机的取证未来
    How to extract WeChat chat messages from a smartphone running Android 7.x or above
  • 原文地址:https://www.cnblogs.com/yhwsy/p/5733473.html
Copyright © 2011-2022 走看看