一.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每执行一次,光标就会向后移一位。 */
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(" "); } }
当不使用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类的方法