论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微秒
分享到:
相关推荐
在Java的集合框架中,ArrayList和LinkedList是两种常用的列表实现,它们都实现了List接口,但它们在内存管理和操作效率上存在显著差异。了解这些差异并根据具体应用场景选择合适的列表类型,能够有效提升J2EE应用...
在Java编程语言中,ArrayList、LinkedList和Vector是三种常见的动态数组实现,它们都在java.util包中,用于存储和管理对象的集合。这三个类都实现了List接口,提供了多种操作方法,但它们在内部实现和性能特性上有所...
本文对比了 LinkedList 和 ArrayList 的查询效率,从底层数据结构和 CPU 缓存两个方面进行了分析。首先,从底层数据结构方面,ArrayList 的查询效率高于 LinkedList,因为 ArrayList 底层数据结构是动态数组,可以...
在Java中,ArrayList和LinkedList都是List接口的实现,它们都是存储一组不唯一、有序(插入顺序)的对象的集合。然而,它们在数据结构、性能和使用场景方面存在着很大的区别。 ArrayList ArrayList是基于动态数组...
在Java编程语言中,`ArrayList`和`LinkedList`都是`java.util`包下实现List接口的两种重要数据结构。它们各自具有不同的特性和用途,适用于不同的场景。本篇将深入探讨`ArrayList`和`LinkedList`的基本概念、工作...
2. **ArrayList与LinkedList的区别**:对比分析ArrayList和LinkedList在存储结构、空间效率、时间复杂度等方面的差异,学习如何根据需求选择合适的数据结构。 3. **源码阅读**:通过阅读ArrayList和LinkedList的...
总结来说,ArrayList适用于需要频繁读取且对插入和删除速度要求不高的场景。如果需要频繁插入和删除元素,或者对列表的顺序操作较多,LinkedList可能是更好的选择。在并发环境下,应考虑使用线程安全的容器,如...
在JavaScript中,`ArrayList`和`LinkedList`是两种常见的数据结构,它们在处理数组和链表操作时扮演着重要角色。虽然JavaScript原生并不提供这两种数据结构,但开发者可以通过自定义实现来模拟它们的行为。 **...
Java中的LinkedList和ArrayList是两种非常常见的集合类,它们都是List接口的实现,但在实现方式和性能特性上有所不同。本文将详细探讨这两种数据结构的使用场景、底层原理以及性能对比。 LinkedList是一个基于双向...
LinkedList内部使用双向链表实现,因此它的遍历速度比ArrayList快,但随机访问性能较差。本实例将探讨如何利用LinkedList以及比较器Comparator实现一个自定义排序的人事信息系统。 首先,我们需要创建一个表示人事...
在Java编程语言中,ArrayList和LinkedList是两种常用的集合类,它们都属于List接口的实现,但各有特点,适用于不同的场景。 ArrayList是基于数组实现的,它内部维护了一个Object类型的动态数组。由于数组的特性,...
在实际编程中,`ArrayList`经常被用来处理动态数据,如存储用户输入、文件读取的结果等。由于其基于数组,因此访问速度较快,但插入和删除元素时,如果位置远离末尾,效率相对较低。如果需要更高效地处理插入和删除...
在Java编程语言中,容器类是程序开发中不可或缺的一部分,它们用于存储和管理对象。ArrayList是Java集合框架中的一种重要容器,它以数组为基础实现,提供了动态数组的功能。本篇文章将深入探讨ArrayList的工作原理,...
ArrayList和LinkedList是List接口的两种主要实现,各有优缺点。 ArrayList的底层数据结构是一个Object类型的数组,这使得它在读取元素时具有较高的效率,因为数组的随机访问性能优异。ArrayList的这种设计使得在...
在Java编程语言中,ArrayList和LinkedList都是集合框架中两种重要的列表实现,它们分别基于不同的数据结构,具有不同的特性和性能特点。以下是对这两个类的详细分析: 1. 数据结构: - ArrayList是基于动态数组...
ArrayList是Java编程语言中最常用的集合类之一,它属于Java集合框架的一部分,主要用来存储和管理对象的有序列表。ArrayList的实现基于动态数组,允许在列表的任何位置进行增删改查操作。本压缩包文件“ArrayList...
它提供了多种集合类,例如 ArrayList、LinkedList、HashSet、TreeSet 等,每种集合类都有其特点和应用场景。在面试中,Java Collections 相关的问题是非常常见的,本文将对 Java Collections Interview Questions ...
本文将对阿里巴巴 Java 面试题进行详细的解析和总结,涵盖 Java 集合框架、Hashtable 与 HashMap 的区别、ArrayList 和 LinkedList 的区别、Properties 类的特点、线程安全、Struts2 框架、反射机制、线程池、Tomcat...
对于需要频繁插入和删除元素的场景,使用LinkedList可能更加合适,因为LinkedList在插入和删除操作方面有更好的性能。 通过上述知识点的阐述,可以了解到ArrayList在Java集合框架中的重要性以及其内部机制。熟练...