RandomAccess接口
RandomAccess是一个标记接口,实现该接口表示支持快速访问。这是一个空接口,没有任何方法。
当实现该接口时,说明支持快速访问。
即:
for (int i=0, n=list.size(); i<n; i++)
list.get(i);
要比
for (Iterator i=list.iterator(); i.hasNext(); )
i.next();
访问速度快。
当没有实现该接口时,
for (int i=0, n=list.size(); i<n; i++)
list.get(i);
要比
for (Iterator i=list.iterator(); i.hasNext(); )
i.next();
访问速度慢。
例子
复制代码
package com.lion;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.RandomAccess;
public class RandomAccessTest {
public static void traverse(List list) {
long startTime;
long endTime;
//遍历前先判读是否实现了RandomAccess接口
if (list instanceof RandomAccess) {
System.out.println(list.getClass()+"实现了RandomAccess接口");
}
else
{
System.out.println(list.getClass()+"未实现RandomAccess接口");
}
System.out.println("\n以实现RandomAccess接口方式访问");
startTime = System.currentTimeMillis();
for (int i = 0; i < list.size(); i++) {
Object o = list.get(i);
// System.out.println(o);
}
endTime = System.currentTimeMillis();
System.out.println("耗时:" + (endTime - startTime));
System.out.println("\n以未实现RandomAccess接口方式访问");
startTime = System.currentTimeMillis();
for (Iterator iter = list.iterator(); iter.hasNext();) {
Object o = iter.next();
// System.out.println(o);
}
endTime = System.currentTimeMillis();
System.out.println("耗时:" + (endTime - startTime));
}
/**
* @param args
*/
public static void main(String[] args) {
List arraylist = new ArrayList();
// 添加1000个元素
for (int i = 0; i < 100000; i++) {
arraylist.add("aaa");
}
List linkList = new LinkedList();
// 添加1000个元素
for (int i = 0; i < 100000; i++) {
linkList.add("aaa");
}
traverse(arraylist);
traverse(linkList);
}
}
复制代码
运行结果:
class java.util.ArrayList实现了RandomAccess接口
以实现RandomAccess接口方式访问
耗时:9
以未实现RandomAccess接口方式访问
耗时:12
class java.util.LinkedList未实现RandomAccess接口
以实现RandomAccess接口方式访问
耗时:4128
以未实现RandomAccess接口方式访问
耗时:7
转载自https://www.cnblogs.com/lion88/p/4186820.html