java链表的get方法遍历VS使用迭代器遍历
2015-09-30 15:05
330 查看
无论何种集合,应当允许用户以某种方式遍历集合,而不需要知道对象在集合中是如何表示及存储的,java集合框架为各种数据结构的集合,比如链表、散列表等都提供了迭代器。
某些集合根据其数据存储结构和所具有的操作也会提供返回数据的方法,例如LinkedList类中的get(int index)方法返回当前链表中第index个节点节点的对象。显然链表的get方法遍历比顺序表的get方法的速度慢。java推荐使用集合提供的迭代器,而不是集合本身来遍历其中的对象。因为迭代器遍历集合的方法在找到集合中的一个对象的同时,也得到带遍历的后继对象的引用,因此迭代器可以快速地遍历集合。
下面展示java链表的get方法遍历VS使用迭代器遍历的耗时对比
结果:
get方法遍历耗时:1623ms
迭代器遍历耗时:7ms
显而易见,使用迭代器遍历占据明显优势。
某些集合根据其数据存储结构和所具有的操作也会提供返回数据的方法,例如LinkedList类中的get(int index)方法返回当前链表中第index个节点节点的对象。显然链表的get方法遍历比顺序表的get方法的速度慢。java推荐使用集合提供的迭代器,而不是集合本身来遍历其中的对象。因为迭代器遍历集合的方法在找到集合中的一个对象的同时,也得到带遍历的后继对象的引用,因此迭代器可以快速地遍历集合。
下面展示java链表的get方法遍历VS使用迭代器遍历的耗时对比
package test5; import java.util.LinkedList; import java.util.*; public class Main { public static void main(String[] args) { LinkedList<Integer> list=new LinkedList<Integer>(); for(int i=0;i<65536;i++) list.add(new Integer(i)); Iterator<Integer> iter=list.iterator(); long st=System.currentTimeMillis(); Integer t; for(int i=9;i<65536;i++) t=list.get(i); long et=System.currentTimeMillis(); System.out.println("get方法遍历耗时:"+(et-st)+"ms"); st=System.currentTimeMillis(); while(iter.hasNext()) t=iter.next(); et=System.currentTimeMillis(); System.out.println("迭代器遍历耗时:"+(et-st)+"ms"); } }
结果:
get方法遍历耗时:1623ms
迭代器遍历耗时:7ms
显而易见,使用迭代器遍历占据明显优势。
相关文章推荐
- JAVA基础学习day20--IO流二-缓冲流、字节流
- 多线程系列一——何为线程与java中线程的创建
- eclipse下SVN subclipse插件
- 使用JDK工具检查运行系统是否存在内存泄露
- eclipse安装与配置
- Unbound classpath container: 'JRE System Library [jdk17060]' in project ***
- 系统当前时间
- 【JavaWeb探究】自定义JSP标签(三)
- Kmeans聚类算法-二维度数组(Java实现)
- java 深度遍历文件夹中的所有文件
- Java多线程[2]:join() 方法
- 解决打开eclipse弹出一堆配置信息的问题
- 基于注解的 Spring MVC 简单入门
- JAVA8函数式编程
- 基于密度的局部离群点检测(lof算法) (Java 实现)
- 利用client获取外链接口
- Spring实现AOP的方式
- 【夯实基础】javakeywordsynchronized 详细说明
- Java冒泡排序
- myeclipse修改乱码(编码格式修改)