测试代码:
分别使用了①iterator迭代器、②普通的for循环+get方法、③增强型的for循环对list进行遍历
package club.jming.test;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class IteratorTest {
public static void main(String[] args) {
List<Integer> list = new LinkedList<>();
for(int i=0;i<100000;i++){
list.add(i);
}
Iterator iterator = list.listIterator();
//利用迭代器
long start = System.currentTimeMillis();
while (iterator.hasNext()){
int tmp = (int) iterator.next();
}
long end = System.currentTimeMillis();
System.out.println(end-start);
//利用普通for循环+get方法
start = System.currentTimeMillis();
for(int i=0;i<list.size();i++){
int tmp = list.get(i);
}
end = System.currentTimeMillis();
System.out.println(end-start);
//利用增强的for循环
start = System.currentTimeMillis();
for(int i:list){
int tmp = i;
}
end = System.currentTimeMillis();
System.out.println(end-start);
}
}
运行结果:
3 --->①iterator迭代器
4638 --->②普通的for循环+get方法
2 --->③增强型的for循环
Process finished with exit code 0
分析:
①实现了Iterable接口的类都可以使用增强型的for循环,所以本质上,两者是类似的;
②iterator迭代器会记录当前值,而不需要像get方法那样,需要从头开始搜索一遍(基于链表的List);
③iterator与增强型的for循环的时间复杂度为O(N),而普通的for循环+get方法则是O(N²);
总结:
在遍历链表型线性表时,尽量使用迭代器或者增强型的for循环,节省时间消耗。