Iterator
-
Iterator对象成为迭代器(设计模式的一种),主要用于遍历Collection集合中的元素。
-
GOF给迭代器的定义为,提供一种方法访问一个容器(container)对象中各个元素,而又不暴露该对象的内部细节。迭代器模式,就是为了容器而生。
-
Iterator仅用于遍历集合,Iterator本身并不提供承载对象的能力。如果需要创建Iterator对象,则必须有一个被迭代的集合
-
集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。
package com.cheng.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Itertor {
public static void main(String[] args) {
Collection coll = new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new String("牛不牛"));
coll.add(false);
coll.add(new Person("Ali",24));
//迭代器遍历集合
Iterator iterator = coll.iterator();
while (iterator.hasNext()){//hasNext判断是否有下一元素
System.out.println(iterator.next());//遍历
}
/*
迭代器的两种错误用法
while(coll.iterator.hasnext){
System.out.println(iterator.next());
} 这个会陷入死循环,因为每次调用iterator时候都会生成一个新的迭代器对象,而新的迭代器对象指针都是定位第一个元素之前
如 1 2 3 4 会一直输出1
while(iteritor.next != null){
System.out.println(iterator.next());
}这个会跳着输出 比如 1 2 3 4
判断1不空 然后输出2
判断3不空 然后输出4
*/
//remove 移除 不能没用next就移除(这是指针在第一个元素之前) 或者移除两次
Iterator iterator1 = coll.iterator();
while (iterator1.hasNext()){
Object obj = iterator1.next();
if ("牛不牛".equals(obj)) {
iterator1.remove();//remove移除牛不牛元素
}
}
Iterator iterator2 = coll.iterator();
while (iterator2.hasNext()){
System.out.println(iterator2.next());
}
}
}