java中LinkedList的遍历速度

我想比较一下用Iterator、for语句、foreach来遍历LinkedList,谁的速度快。于是写了如下代码:

package mystudy;

import java.util.*;

public class MyStudy {
    private static final int SIZE = 100000;
    private Integer[] arr = new Integer[SIZE];
    private AbstractList<Integer> absList;

    public void initialize(){
        LinkedList<Integer> list = new LinkedList<Integer>();
        for (int i = 0; i < SIZE; i ++){
            arr[i] = i;
            list.add(i);
        }

        absList = (AbstractList<Integer>)list.subList(0, list.size());
    }

    public void method0(){
        Integer tmp;
        for (int i = SIZE - 1; i >= 0; i --){
            tmp = arr[i];
        }
    }

    public void method1(){
        ListIterator<Integer> it = absList.listIterator(SIZE);
        Integer tmp;
        while(it.hasPrevious()){
            tmp = it.previous();
        }
    }

    public void method2(){
        Integer tmp;
        for (int i = SIZE - 1; i >= 0; i --){
            tmp = absList.get(i);
        }
    }

    public void method3(){
        Integer tmp;
        for(Integer i : absList){
            tmp = i;
        }
    }

    
    public static void main(String[] args){
        MyStudy study = new MyStudy();
        study.initialize();

        long start,expend0,expend1,expend2,expend3;

        start = System.currentTimeMillis();
        study.method0();
        expend0 = System.currentTimeMillis() - start;

        start = System.currentTimeMillis();
        study.method1();
        expend1 = System.currentTimeMillis() - start;

        start = System.currentTimeMillis();
        study.method2();
        expend2 = System.currentTimeMillis() - start;

        start = System.currentTimeMillis();
        study.method3();
        expend3 = System.currentTimeMillis() - start;

        System.out.println("expend0:" + expend0 + " expend1:" + expend1 + " expend2:" + expend2 + " expend3:" + expend3);

    }
    
}

运行的结果:

expend0:1 expend1:7 expend2:5548 expend3:7

可见用for语句遍历LinkedList是最慢的。

时间: 2024-11-12 07:36:55

java中LinkedList的遍历速度的相关文章

Java中LinkedList的remove方法真的耗时O(1)吗?

这个问题其实来源于Leetcode的一道题目,也就是上一篇日志 LRU Cache.在使用LinkedList超时后,换成ArrayList居然AC了,而问题居然是在于List.remove(Object o)这个方法. 我们知道,链表和数组相比,最主要的特点就是add和remove的操作是O(1)的.Java中的链表一般使用LinkedList这个类型,数组一般使用ArrayList.它们同时implements了List这个interface,所以都有remove(int index)和re

Java中LinkedList笔记

之前写程序似乎也没有怎么关注过底层的结构,最近正好遇到了链表的问题,于是仔细阅读了Java中链表的实现LinkedList 简单记录一下看完的总结: 1.LinkedList中定义了一个类型Node<E> ,包括3个属性,即Node中封装的元素item,当前元素的前一个元素引用和后一个元素引用prev/next,和链表定义一直,没什么新鲜     private static class Node<E> {         E item;         Node<E>

Java中四种遍历Map对象的方法

方法一:在for-each循环中使用entry来遍历,通过Map.entrySet遍历key和value,这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Integer,Integer> map = new HashMap<Integer,Integer>(); for(Map.Entry<Integer,Integer> entry:map.entrySet()){ System.out.println("key="

Java中map接口 遍历map

java集合框架用于存储数据,也被称为集合类 位于java.util包下 java.util包下常用接口和类 Collection和Map是Java集合框架的根接口 List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问. Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是不能集合里元素不允许重复的原因). Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value. Map接口 Map

【数据结构】java中LinkedList学习总结

一.LinkedList实现原理概述 LinkedList 和 ArrayList 一样,都实现了 List 接口,但其内部的数据结构有本质的不同.LinkedList 是基于链表实现的(通过名字也能区分开来),所以它的插入和删除操作比 ArrayList 更加高效.但也是由于其为基于链表的,所以随机访问的效率要比 ArrayList 差. 二.LinkedList类定义 public class LinkedList<E> extends AbstractSequentialList<

【转】Java中 List的遍历

原文网址:http://blog.csdn.net/player26/article/details/3955906 import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ListTest { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer&g

Java中LinkedList和ArrayList的区别

首先亮一下他们两个基本区别,面试的时候可以用来和面试官唠嗑啊 1.ArrayList实现了基本动态数组结构,Linked基于链表的结构.链表?什么是链表?答:"链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中指针连接次序实现的"注:此句话通过了科普中国百科科学词条编写与应用工作项目的审核. 2.对于get和set,ArrayList的性能优于LinkedList,因为Linked要移动指针,麻烦的很 3.对于add和remove,LinkedList要优

Java中的HashMap遍历

import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class TestMap { public static void main(String[] args) { Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "a"); map.put(2, "b

Java中List集合遍历的三种方式

首先创建一个List集合: List<String> list = new ArrayList<String>();list.add("name"); list.add("age"); list.add("sex"); 第一种:利用集合的size()方法遍历for(int i= 0:i<list.size();i++){ list.get(i);} 第二种:for增强循环for(String string : str