ArrayList与LinkedList不同方式访问速度比较

本篇文章主要是比较使用循环遍历与使用迭代器进行遍历两种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时都使用迭代器,少用循环。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容