`
雅马哈大野熊
  • 浏览: 6836 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

论ArrayList与LinkedList的读取和存储速度与结论相驳

 
阅读更多

论ArrayList与LinkedList的读取和存储速度优势

 

课题内容:

 

ArryList 与 LinkedList的速度比较(每组4个值,取其平均数):
在存储999999个值时:ArrayList平均每储存一个值的时间是:4.3000043000043e-4
                                 LinkedList平均每储存一个值的时间是:8.542508542508543e-4


也就是说,平均每储存一个数据ArrayList仅仅是LinkedList时间的50.337%。

 在读取时:            ArrayList平均每读取一个值的时间是:5.000005000005e-6
                          LinkedList平均每读取一个值的时间是:4.55000455000455e-5


也就是说,平均每检查一个数据ArrayList仅仅是LinkedList时间的40.42%。

 

这样一来证明结果和理论中的ArrayList的读取速度优于LinkedList与实验结果相符合,而存储速度却也是小于Linked,这与结论相驳。小弟在这里求解释!


ArrayList:
------------------------------------------------------------------------------------------import java.util.*;
public class test {

 

 

 public static void main(String[] args) {

  GregorianCalendar d = new GregorianCalendar();
  //定义变量存储开始的时间
  int startMinute;
  int startSecond;
  //定义变量存储结束的时间
  int endMinute;
  int endSecond;
  //声明
  ArrayList arr = new ArrayList();
  startMinute = d.get(Calendar.MINUTE);
  startSecond = d.get(Calendar.SECOND);
  System.out.println("The function start at "+startMinute+" 分 "+startSecond+"秒");
  for(int i = 0;i<999999;i++){
   arr.add(i);
  }
  boolean check =arr.contains(999999);
  endMinute = d.get(Calendar.MINUTE);
  endSecond = d.get(Calendar.SECOND);
  System.out.println(check);
  System.out.println("The function over at "+startMinute+" 分 "+startSecond+"秒");
 }
}
------------------------------------------------------------------------------------------结果:
The function start at 51 分 43秒
true
The function over at 51 分 43秒
然而将ArrayList换成LinkedList后,结果还是:
The function start at 12 分 0秒
false
The function over at 12 分 0秒
下面,我决定将时间单位换以毫秒:
结果:
The function start at 21 分 599毫秒
false
The function over at 21 分 599毫秒
是的,结果还是没有变!那么,就用微秒为单位吧。
———————————————————————————————————import java.util.*;
import java.text.*;
public class test {

 public static void main(String[] args) {
  SimpleDateFormat change = new SimpleDateFormat();
  GregorianCalendar d = new GregorianCalendar();
  
  //定义变量存储开始的时间
  int startMinute;
  int startSecond;
  //定义变量存储结束的时间
  int endMinute;
  int endSecond;
  //声明
  ArraydList arr = new ArrayList();
  startMinute = d.get(Calendar.MINUTE);
  startSecond = d.get(Calendar.MILLISECOND);
  long begintime = System.currentTimeMillis();
  System.out.println(begintime);
  for(long i = 0;i<999999;i++){
   arr.add(i);
  }
  //boolean check =arr.contains(0);
  endMinute = d.get(Calendar.MINUTE);
  endSecond = d.get(Calendar.MILLISECOND);
  //System.out.println(check);
  long endtime = System.currentTimeMillis();
  System.out.println(endtime);
 }
}
————————————————————————————————————————
存储999999个数据的速度差是:平均值430微秒左右
1306481305308
差420微秒
1306481305728
-------------------------------------
1306481498752
差430微秒
1306481499182
------------------------------------
1306481591170
差470微秒
1306481591640
-----------------------------------
1306481646002
差400微秒
1306481646402
-----------------------------------
读取速度是:平均值减去430,其速度约5微秒左右
1306481432303
false
1306481432713
相差
410微秒
---------------------------
1306481763388
false
1306481763848
相差
460微秒
-------------------------
1306481807328
false
1306481807748
相差
420微秒
-------------------------
1306481837805
false
1306481838255
相差
450微秒
下面将代码中的ArrayList换成LinkedList进行比较:
存储999999个数据的速度差是:平均值854.25微秒左右
1306506487995
相差842微秒
1306506488837
------------------------------------
1306506678282
相差905微秒
1306506679187
-------------------------------------
1306506727408
相差796微秒
1306506728204
-------------------------------------
1306506815675
相差847微秒
1306506816549
--------------------------------------
下面加上查找功能:平均值减去854.25,其速度约45.5微秒左右
1306506923287
false
1306506924145
相差
858微秒
--------------------------------------
1306507030742
false
1306507031647
相差
905微秒
--------------------------------------
1306507072115
false
1306507073051
相差
936微秒
------------------------------------------
1306507171733
false
1306507172633
相差
900微秒

0
1
分享到:
评论
1 楼 mypyg 2011-05-29  
ArrayList头部插入和尾部插入效率是不一样的,你的都是尾部插入。

相关推荐

    合理运用ArrayList与LinkedList

    在Java的集合框架中,ArrayList和LinkedList是两种常用的列表实现,它们都实现了List接口,但它们在内存管理和操作效率上存在显著差异。了解这些差异并根据具体应用场景选择合适的列表类型,能够有效提升J2EE应用...

    ArrayList LinkedList Vector性能测试

    在Java编程语言中,ArrayList、LinkedList和Vector是三种常见的动态数组实现,它们都在java.util包中,用于存储和管理对象的集合。这三个类都实现了List接口,提供了多种操作方法,但它们在内部实现和性能特性上有所...

    从底层数据结构和CPU缓存两方面剖析LinkedList的查询效率为什么比ArrayList低.docx

    本文对比了 LinkedList 和 ArrayList 的查询效率,从底层数据结构和 CPU 缓存两个方面进行了分析。首先,从底层数据结构方面,ArrayList 的查询效率高于 LinkedList,因为 ArrayList 底层数据结构是动态数组,可以...

    区分Java中的ArrayList和LinkedList

    在Java中,ArrayList和LinkedList都是List接口的实现,它们都是存储一组不唯一、有序(插入顺序)的对象的集合。然而,它们在数据结构、性能和使用场景方面存在着很大的区别。 ArrayList ArrayList是基于动态数组...

    benchmark-lists:ArrayList 与 LinkedList

    在Java编程语言中,`ArrayList`和`LinkedList`都是`java.util`包下实现List接口的两种重要数据结构。它们各自具有不同的特性和用途,适用于不同的场景。本篇将深入探讨`ArrayList`和`LinkedList`的基本概念、工作...

    毕业设计源码之ArrayList,LinkList链表接口实现.zip

    2. **ArrayList与LinkedList的区别**:对比分析ArrayList和LinkedList在存储结构、空间效率、时间复杂度等方面的差异,学习如何根据需求选择合适的数据结构。 3. **源码阅读**:通过阅读ArrayList和LinkedList的...

    JAVA提高第十篇 ArrayList深入分析

    总结来说,ArrayList适用于需要频繁读取且对插入和删除速度要求不高的场景。如果需要频繁插入和删除元素,或者对列表的顺序操作较多,LinkedList可能是更好的选择。在并发环境下,应考虑使用线程安全的容器,如...

    ArrayList_LinkedList

    在JavaScript中,`ArrayList`和`LinkedList`是两种常见的数据结构,它们在处理数组和链表操作时扮演着重要角色。虽然JavaScript原生并不提供这两种数据结构,但开发者可以通过自定义实现来模拟它们的行为。 **...

    JAVALinkedList和ArrayList的使用及性

    Java中的LinkedList和ArrayList是两种非常常见的集合类,它们都是List接口的实现,但在实现方式和性能特性上有所不同。本文将详细探讨这两种数据结构的使用场景、底层原理以及性能对比。 LinkedList是一个基于双向...

    java中LinkedList任意排序实例

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

    ---Java笔记---

    在Java编程语言中,ArrayList和LinkedList是两种常用的集合类,它们都属于List接口的实现,但各有特点,适用于不同的场景。 ArrayList是基于数组实现的,它内部维护了一个Object类型的动态数组。由于数组的特性,...

    java代码-使用集合ArrayList对字符串进行存储和管理 任务: 1.定义ArrayList对象 2.存储学科名称,见运行效果图 3.输出集合中元素的个数 4.遍历输出集合中的所有元素

    在实际编程中,`ArrayList`经常被用来处理动态数据,如存储用户输入、文件读取的结果等。由于其基于数组,因此访问速度较快,但插入和删除元素时,如果位置远离末尾,效率相对较低。如果需要更高效地处理插入和删除...

    java中容器类ArrayList(底层数组实现)和数组存取效率简单测试

    在Java编程语言中,容器类是程序开发中不可或缺的一部分,它们用于存储和管理对象。ArrayList是Java集合框架中的一种重要容器,它以数组为基础实现,提供了动态数组的功能。本篇文章将深入探讨ArrayList的工作原理,...

    ArrayList的学习821.docx

    ArrayList和LinkedList是List接口的两种主要实现,各有优缺点。 ArrayList的底层数据结构是一个Object类型的数组,这使得它在读取元素时具有较高的效率,因为数组的随机访问性能优异。ArrayList的这种设计使得在...

    java中ArrayList 、LinkList的区别分析

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

    ArrayList源码.zip

    ArrayList是Java编程语言中最常用的集合类之一,它属于Java集合框架的一部分,主要用来存储和管理对象的有序列表。ArrayList的实现基于动态数组,允许在列表的任何位置进行增删改查操作。本压缩包文件“ArrayList...

    Java Collections Interview Questions.pdf

    它提供了多种集合类,例如 ArrayList、LinkedList、HashSet、TreeSet 等,每种集合类都有其特点和应用场景。在面试中,Java Collections 相关的问题是非常常见的,本文将对 Java Collections Interview Questions ...

    阿里巴巴 java面试题

    本文将对阿里巴巴 Java 面试题进行详细的解析和总结,涵盖 Java 集合框架、Hashtable 与 HashMap 的区别、ArrayList 和 LinkedList 的区别、Properties 类的特点、线程安全、Struts2 框架、反射机制、线程池、Tomcat...

    java提高篇(二一)-----ArrayList.pdf

    对于需要频繁插入和删除元素的场景,使用LinkedList可能更加合适,因为LinkedList在插入和删除操作方面有更好的性能。 通过上述知识点的阐述,可以了解到ArrayList在Java集合框架中的重要性以及其内部机制。熟练...

Global site tag (gtag.js) - Google Analytics