试述ArrayList和LinkedList性能区别及使用场景
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
概述 List 是一个有序、可重复的集合,集合中每个元素都有其
对应的顺序索引。它主要有两个常用的实现类:ArrayList 类和 LinkedList 类。
ArrayList 类实现了可变数组的大小,存储在内的数据称为 元素。使用 ArrayList 创建的集合,允许对集合中的元素进行快 速的随机访问,不过,向 ArrayList 中插入与删除元素的速度相 对较慢。
参考文献 [1] 耿祥义,张跃平著.Java 2实用教程(第5版)[M].北京:清华大学出版
社,2017. [2] 欧阳桂秀.试谈Java中ArrayList类的使用[J].电脑编程技巧与维
护,2012,(22).
40 科学与信息化2020年1月中
static long timeList(List lst)...{ long start=System.currentTimeMillis(); for(int i=0;i<N;i++)...{ int index=Collections.binarySearch(lst, values.get(i)); if(index!=i) System.out.println(“***错误***”); } return System.currentTimeMillis()-start;
LinkedList中它的上一个元素和下一个元素。一个有1000个元素 的LinkedList对象将有1000个链接在一起的Entry对象,每个对 象都对应于列表中的一个元素。这样的话,在一个LinkedList结 构中将有一个很大的空间开销,因为它要存储这1000个Entity对 象的相关信息。
ArrayList使用一个内置的数组来存储元素,这个数组的起 始容量是10。如果没有足够的空间来存放新的元素,数组将不 得不被重新进行分配以便能够增加新的元素。对数组进行重新 分配,将会导致性能急剧下降。
IT技术论坛
TECHNOLOGY AND INFORMATION
试述ArrayList和LinkedList性能区别及使用场景
黄明辉 湖北三峡职业技术学院电子信息学院 湖北 宜昌 443000
摘 要 ArrayList和LinkedList都是实现了List接口的容器类,用于存储一系列的对象引用。他们都可以对元素的增删 改查进行操作。本文通过时间复杂度、空间复杂度来说明一下他们性能区别及应用场景。 关键词 Java List;ArrayList;LinkedList
LinkedList慢,如果在List靠近末尾的地方插入,那么ArrayList 只需要移动较少的数据,而LinkedList则需要一直查找到列表尾 部,反而耗费较多时间,这时ArrayList就比LinkedList要快。
作者简介 黄明辉(1967-),浙江杭州;副教授,现就职单位:湖北三峡
职业技术学院电子信息学院,研究方向:软件开发。
} public static void main(String args[])...{
System.out.println(“ArrayList消耗时 间:”+timeList(new ArrayList(values)));
System.out.printtimeList(new LinkedList(values))); }
} 输出是:ArrayList消耗时间:15
LinkedList消耗时间:2596 这个结果不是固定的,但是基本上ArrayList的时间要明显 小于LinkedList的时间。因此在这种情况下不宜用LinkedList。
2 空间复杂度 在LinkedList中有一个私有的内部类,定义如下: private static class Entry { Object element; Entry next; Entry previous; } 每个Entry对象reference列表中的一个元素,同时还有在
3 ArrayList和LinkedList区别与使用场景 (1)如果应用程序对数据有较多的随机访问,ArrayList
对象要优于LinkedList对象; (2)如果应用程序有更多的插入或者删除操作,较少的
数据读取,LinkedList对象要优于ArrayList对象; (3)不过ArrayList的插入,删除操作也不一定比
LinkedList 类采用链表结构保存对象。需要频繁向集合中 插入和删除元素时,使用 LinkedList 类比 ArrayList 类效果高, 但是 LinkedList 类随机访问元素的速度则相对较慢。
1 时间复杂度 假设我们有一个很大的列表,它里面的元素已经排好序
了,这个列表可能是ArrayList类型的也可能是LinkedList类型 的,现在我们对这个列表来进行二分查找(binary search),比较 列表是ArrayList和LinkedList时的查询速度,看下面的程序:
public class TestList ...{ public static final int N=50000; public static List values; static...{ Integer vals[]=new Integer[N]; Random r=new Random(); for(int i=0,currval=0;i<N;i++)...{ vals=new Integer(currval); currval+=r.nextInt(100)+1; } values=Arrays.asList(vals); }