Iterator
Iterator迭代器
它是Java集合的顶层接口(不包括map系列的集合,Map接口是map系列集合的顶层接口)
注:更多详细方法请自行在 API 上查找
Iterator 接口是专门用来对集合进行迭代的一个迭代器(遍历)。对集合的遍历,如果使用的是同一个迭代器,并且迭代同一个集合,那么只能迭代一次。
package org.lanqiao.collection.demo;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
public class IteratorDemo {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(1);//这里的1 是integer类型 实现了自动装箱
c.add("aa");
c.add("bb");
//获取集合的迭代器
Iterator iter =c.iterator();
while(iter.hasNext()) {//判断当前集合时候有下一个元素
Object obj = iter.next();//获取集合中的下一个元素
System.out.println(obj);
}
System.out.println("------------------");
Iterator iter2 = c.iterator();
while(iter2.hasNext()) {//判断当前集合时候有下一个元素
Object obj = iter2.next();//获取集合中的下一个元素
System.out.println(obj);
}
System.out.println("---使用for循环进行集合的迭代---------------");
for(Iterator iter3 = c.iterator();iter3.hasNext();) {
Object o = iter3.next();
System.out.println(o);
}
System.out.println("---使用for循环进行集合的迭代---------------");
Iterator iter4 = c.iterator();
for(;iter4.hasNext();) {
Object ob = iter4.next();
System.out.println(ob);
}
System.out.println("------------------");
Vector v = new Vector();
v.add("aaa");
v.add("bbb");
v.add("ccc");
Enumeration en = v.elements();
while(en.hasMoreElements()) {
System.out.println(en.nextElement());
}
}
}
两种迭代写法的区别
- 迭代器的生命周期不同;
- for循环更节省空间,有利于jvm进行垃圾回收,空间释放
- 从性能和资源的利用上来说,for循环更好。
在实际使用中,对于集合的迭代更加常用的是while
Enumeration(枚举)接口的作用和Iterator类似,只提供了遍历Vector和HashTable类型集合元素的功能,不支持元素的移除操作。
区别
- Enumeration 是已经废弃的接口。支持的迭代的集合是有限的。
- Enumeration速度比Iterator的更快,同时占用更少的内存。
- Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。
- Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。