11.Iterator iterator():返回在该集合的元素上进行迭代的迭代器,用于遍历该集合所有元素。
- boolean hasNext()
- E next()
- void remove()
package com.first;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class HelloWorld {
public static void main(String[] args) {
Collection c1=new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
Iterator it=c1.iterator();
boolean b1=it.hasNext(); //判断集合中是否有元素,有就返回true
Object obj1=it.next(); //取出集合中的数据
System.out.println(b1);
System.out.println(obj1);
boolean b2=it.hasNext();
Object obj2=it.next();
System.out.println(b2);
System.out.println(obj2);
}
}
运行结果为
true
a
true
b
上述代码可以简写为
package com.first;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class HelloWorld {
public static void main(String[] args) {
Collection c1=new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
Iterator it=c1.iterator();
while (it.hasNext()) {
Object obj=it.next();
System.out.println(obj);
}
}
}
运行结果为
a
b
c
d
遍历元素的过程为
在遍历元素时,首先获得迭代器对象,然后用hasNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已达到了集合末尾,停止遍历元素。需要注意的是,在通过next()方法获取元素时,必须保证要获取的元素存在,否则,会抛出NoSuchElementException异常。
Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素。
在调用Iterator的next()方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next()方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next()方法时,迭代器的索引会指向第二个元素并将该元素返回,以此类推,直到haxNext()方法返回false,表示到达了集合的末尾,终止对元素的遍历。
通过迭代器获取集合中的元素时,都会将这些元素当做Object类型看待,如果想得到特定类型的元素,则需要进行强制类型转换。
虽然Iterator可以用来遍历集合中的元素,但写法上比较麻烦,为了简化书写,从JDK5.0开始,提供了foreach循环。foreach循环是一种更加简洁的for循环,其底层依赖迭代器。foreach循环用于遍历数组或集合中的元素,其具体语法如下。
for(容器中元素的类型 临时变量:容器变量){
执行语句
}
for(Object obj:list){
System.out.println(obj);
}
- 当使用foreach循环遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改。
- 在使用Iterator迭代器对集合中的元素进行迭代时,如果调用了集合对象的remove()方法去删除元素,会出现异常。因为集合中删除了元素会导致迭代器预期的迭代次数发生改变,导致迭代器的结果不准确。可以用迭代器本身的remove()方法来解决这个问题。