`
大器晚成
  • 浏览: 52796 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Java中LinkedList遍历速度可比ArrayList快!

 
阅读更多
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.Random;

 public class TestList {
     private static Random random = new Random();
     public static void main(String[] args){
         ArrayList<String> arraylist = new ArrayList<String>();
         LinkedList<String> linkedlist = new LinkedList<String>();
         for(int i=0;i<50000;i++){
             String r = randomString();
             arraylist.add(r);
             linkedlist.add(r);
         }
         
         System.out.println("arraylist size "+arraylist.size());
         System.out.println("linkedlist size "+linkedlist.size());
         System.out.println("------");
         long begin = System.currentTimeMillis();
         for(int i=0;i<1000;i++){
             for(int j=0;j<arraylist.size();j++){
            	 String s=arraylist.get(j);
             }
         }
         System.out.println("arraylist get(n) time "+(System.currentTimeMillis()-begin));
         
         begin = System.currentTimeMillis();
         for(int i=0;i<1000;i++){
             for(String s:arraylist){
             }
         }
         System.out.println("arraylist foreach time "+(System.currentTimeMillis()-begin));
         
         begin = System.currentTimeMillis();
         for(int i=0;i<1;i++)
         for(int j=0;j<linkedlist.size();j++){
        	 String s=linkedlist.get(j);
         }
         System.out.println("linkedlist get(n) time "+(System.currentTimeMillis()-begin)*1000);
         
         begin = System.currentTimeMillis();
         for(int i=0;i<1000;i++)
         for(String s:linkedlist){
//             linkedlist.get(j);
         }
         System.out.println("linkedlist foreach time "+(System.currentTimeMillis()-begin));
         
         
     }
     protected static String randomString() {
         return Long.toString(random.nextLong(), 36);
     }
 }


arraylist size 50000
linkedlist size 50000
------
arraylist get(n) time 562
arraylist foreach time 1703
linkedlist get(n) time 1922000
linkedlist foreach time 813

结论linkedlist foreach比arraylist foreach快
1
2
分享到:
评论
8 楼 cloverprince 2011-07-13  
$ java -version
java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.8) (fedora-53.1.9.8.fc14-x86_64)
OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode)
7 楼 cloverprince 2011-07-13  
arraylist size 50000
linkedlist size 50000
------
arraylist get(n) time 736
arraylist foreach time 966
省略了那个linkedlist get(n)
linkedlist foreach time 2034
6 楼 zxh603 2011-07-13  
这个不一定哦,楼主这样写有点误导群众啦
5 楼 wanbin021614 2011-07-12  
遍历应该是arraylist快 删除和添加是linkedlist快 大致是这样 数组大小会影响效率
4 楼 qingming.com 2011-07-12  
二者进行遍历到底谁快的问题还真的很难说。
这样有点误导别人。
本来二者主要区别就是一个是随机读取快,一个是易维护(增加/删除)。不过也没试过linkedlist在首尾增删跟在链的中部增删与arrylist的效率相比如何,在size很小和很大的情况有什么异同。
3 楼 ericslegend 2011-07-12  
对于for(int i =0;i<list.size();i++)这种遍历,ArrayList的运行时间为O(N),LinkedList的运行时间为O(n*n),因为对于LinkedList来说调用get(N)操作耗时O(N),但对于增强的for循环,这里即foreach,任意list的运行时间都为O(N),因为迭代器将有效地从一项到下一项前进。所以对于arraylist一般直接通过下标取(index)是最快的,对于linkedlist由于每次都从链头处开始,所以适合顺序操作,除非使用iterator,这时才是每次从当前位置开始。
2 楼 cectsky 2011-07-12  
arraylist size 50000
linkedlist size 50000
------
arraylist get(n) time 484
arraylist foreach time 2172
linkedlist get(n) time 2983000
linkedlist foreach time 1391

32位Java6 确实是LinkedList foreach要快些
1 楼 deepnighttwo 2011-07-12  
arraylist size 50000
linkedlist size 50000
------
arraylist get(n) time 559
arraylist foreach time 481
linkedlist get(n) time 3723000
linkedlist foreach time 3080

64位Java6,加了参数-Xms300m -Xmx500m。跑了n次,每次都是ArrayList完胜LinkedList。不知道lz是不是debug跑的?

相关推荐

    java迭代器模式实现正反向遍历

    通过上述分析,我们可以看到迭代器模式在Java中如何实现对集合的灵活访问。这种模式不仅隐藏了集合的内部结构,还允许以不同的方式遍历同一集合,如正向或反向遍历。这种灵活性和封装性是迭代器模式的主要优点,使...

    jni操作arraylist对象

    首先,我们需要理解ArrayList在Java中的本质。ArrayList是Java集合框架中的一个重要类,它实现了List接口,用于存储可变大小的有序对象列表。ArrayList通过数组来存储元素,因此可以快速访问任意位置的元素,但插入...

    ArrayList LinkedList Vector区别

    LinkedList 则使用双向链表实现存储,索引数据需要遍历链表,但是插入数据时只需要记录本项的前后项,即使插入数据较快。 在选择何种数据结构时,需要根据实际情况考虑性能和线程安全性等因素。ArrayList 和 ...

    Java中ArrayList和LinkedList区别 时间复杂度 与空间复杂度1

    在 Java 中,ArrayList 和 LinkedList 是两种常用的集合类,它们各自具有不同的特性和适用场景,主要体现在数据结构、访问效率和操作性能上。 1. 数据结构: - ArrayList 实现了一个动态数组,它内部是一个 Object...

    java中LinkedList任意排序实例

    LinkedList内部使用双向链表实现,因此它的遍历速度比ArrayList快,但随机访问性能较差。本实例将探讨如何利用LinkedList以及比较器Comparator实现一个自定义排序的人事信息系统。 首先,我们需要创建一个表示人事...

    Java中ArrayList和LinkedList区别

    在Java编程语言中,ArrayList和LinkedList都是集合框架中两种重要的列表实现,它们分别基于不同的数据结构,具有不同的特性和性能特点。以下是对这两个类的详细分析: 1. 数据结构: - ArrayList是基于动态数组的...

    Java 中Linkedlist类的源代码

    在Java编程语言中,LinkedList是一个实现List接口的类,它以双向链表的形式存储元素。这个数据结构允许我们在列表的任何位置进行插入和删除操作,具有O(1)的时间复杂度,这使得LinkedList在需要频繁进行这些操作时比...

    java 深度优先遍历、广度优先遍历、最短路径、最小生成树

    在Java中,我们可以使用`LinkedList`作为栈或队列来实现DFS和BFS,`PriorityQueue`来辅助Dijkstra算法,`ArrayList`或`HashSet`结合`DisjointSet`实现Kruskal和Prim算法。`Grapher.jar`可能是用来可视化这些算法运行...

    java中LinkedList集合类实现栈和队列.doc

    在Java中,我们可以利用LinkedList的addFirst()方法来模拟压栈操作,将新元素添加到链表头部,使用removeFirst()方法来模拟弹栈操作,删除并返回链表头部的元素。以下是一个简单的栈实现: ```java public class ...

    java基础--list(ArrayList、LinkedList、匿名类).docx

    - **核心方法**:ArrayList底层基于动态扩展的数组实现,插入和删除元素的速度较快,但随机访问速度快。 - **List与数组互转** - **List转字符串**:可以使用`toString()`方法或者`Arrays.toString()`方法将List...

    java多叉树的实现和遍历输出

    本篇文章将深入探讨如何在Java中实现多叉树以及其遍历方法。 首先,我们需要定义一个多叉树节点类。这个类通常包含一个数据字段来存储节点值,以及一个ArrayList或LinkedList等动态数组来存储子节点。以下是一个...

    JAVA利用LinkedList构造栈与队列

    在Java编程语言中,LinkedList是一个常用的集合类,它实现了List接口,同时也提供了双向链表的实现。LinkedList不仅可以作为列表使用,还可以被巧妙地利用来构建栈(Stack)和队列(Queue)这两种基本数据结构。在本...

    Java集合系列(LinkedHashMap+LinkedList+ArrayList)

    今天,我们将介绍 Java 集合系列中的三个重要成员:LinkedHashMap、LinkedList 和 ArrayList。 LinkedHashMap LinkedHashMap 是 Java 集合系列中的一种哈希表实现,继承自 HashMap。它的主要特点是可以维护元素的...

    【Java面试题】ArrayList和LinkedList区别

    【Java面试题】ArrayList和LinkedList区别

    Map+List+ArrayList+LinkedList Java源码

    Java编程语言中的`Map`, `List`, `ArrayList` 和 `LinkedList` 是四个核心的数据结构,它们在实际开发中被广泛使用。了解它们的源码对于深入理解Java集合框架的内部工作原理至关重要,尤其是对初学者而言,这有助于...

    Java 各种集合的区别ArrayList Vector LinkedList map区别

    今天,我们将深入了解 Java 中的集合类别,包括 ArrayList、Vector、LinkedList 和 Map 等。 ArrayList ArrayList 是一种基于数组的集合类别,它可以存储大量的数据。ArrayList 的特点是:它可以动态地增加或减少...

Global site tag (gtag.js) - Google Analytics