本篇文章主要是比较使用循环遍历与使用迭代器进行遍历两种List的速度。
。public static void main(String[] args) {
@SuppressWarnings("unchecked")
ArrayList<Integer> arrayList = (ArrayList<Integer>) initList(new ArrayList<>(), 100000);
LinkedList<Integer> linkedList = new LinkedList<>(arrayList);
System.out.println("遍历ArrayList");
accessByLoop(arrayList);
accessByIter(arrayList);
arrayList = null;
System.out.println("遍历LinkedList");
accessByLoop(linkedList);
accessByIter(linkedList);
}
private static <T> List initList(List list , int val){
for(int i = 0;i < val;i++){
list.add(val);
}
return list;
}
//使用循环进行遍历
private static void accessByLoop(List list){
long currmills = System.currentTimeMillis();
for(int i = 0;i < list.size();i++){
list.get(i);
}
System.out.println("使用循环时长:"+ (System.currentTimeMillis() - currmills) +"ms");
}
//使用迭代器进行遍历
private static void accessByIter(List list){
long currmills = System.currentTimeMillis();
Iterator iterator = list.iterator();
while(iterator.hasNext()){
iterator.next();
}
System.out.println("使用迭代器时长:"+ (System.currentTimeMillis() - currmills) +"ms");
}
代码运行结果:
遍历ArrayList
使用循环时长:5ms
使用迭代器时长:5ms
遍历LinkedList
使用循环时长:5236ms
使用迭代器时长:9ms
因为ArrayList实现了RandomAccess这一标记接口而LinkedList没有实现该接口。建议在访问List时都使用迭代器,少用循环。