RandomAccess此接口用来标记实现类支持快速随机访问,主要目的是根据是否实现此接口来辨别使用随机或连续访问从而提供良好性能
即对于实现了此接口的类实例而言
for (int i=0, i<list.size(); i++)
list.get(i);
的运行速度要快于以下循环:
for (Iterator i=list.iterator(); i.hasNext(); )
i.next();
下列程序将对ArrayList和LinkedList使用同样的遍历方式以测试对于效率的影响
public class demo {
public static void main(String[] args) {
System.out.println("遍历list");
List list = new ArrayList();
demo.add(list); //10000条数据
demo.fo(list); //随机遍历
demo.it(list); //迭代器
System.out.println("遍历link");
list = new LinkedList();
demo.add(list);
demo.fo(list);
demo.it(list);
}
public static void add(List list){
for(int i=0; i<100000; i++)
list.add(i);
}
public static void fo(List list){
long time,times;
time = System.currentTimeMillis();
for(int i=0; i<list.size(); i++){
list.get(i);
}
times = System.currentTimeMillis();
long t = times-time;
System.out.println("随机遍历时间为:"+t);
}
public static void it(List list){
long time,times;
Iterator it = list.iterator();
time = System.currentTimeMillis();
while(it.hasNext()){
it.next();
}
times = System.currentTimeMillis();
long t = times-time;
System.out.println("迭代时间为:"+t);
}
}
输出结果:
遍历list
随机遍历时间为:0
迭代时间为:0
遍历link
随机遍历时间为:16361
迭代时间为:3
-.-
机器太渣一旦超过20W条 2分钟 链表方式并没有遍历完=.=
但由此可看出 随机和迭代对于遍历链表效率的差距
ArrayList超过20W条结果还是有差距的迭代稍微落后~ 但也仅是20W而已.
完毕