比较List和ArrayList的性能及ArrayList和LinkedList优缺点

List和ArrayList的性能比较

在使用ArrayList这样的非泛型集合的过程中,要进行装箱和拆箱操作,会有比较大的性能损失,而使用泛型集合就没有这样的问题。List是泛型,而ArrayList是非泛型。存数据岛ArrayList都需要专程object,读取又要转换成相应的数据类型,List则不需要。

//用来记录开始和结束的时间
 DateTime startTime = new DateTime();
 DateTime endTime = new DateTime();
//定义集合类型ArrayList的一个实例
 ArrayList list = new ArrayList();
//取得当前时间
 startTime = DateTime.Now;
//★★★★★★★★①使用ArrayList类★★★★★★★★
 //ArrayList的add方法的参数是Object型,
 //当我们把int型作为参数传入的时候需要做装箱操作
 //装箱操作将值类型转化为Object类型
 for (int i = 0; i < 1000000; i++)
 {
 list.Add(i);
 }
int iCount = 0;
 //当我们使用int型的时候需要做拆箱操作操作
 //拆箱操作将应用类型转化为Object类型,拆箱过程要做大量的工作
 foreach (int i in list)
 {
 iCount += 1;
 }
Console.WriteLine("使用ArrayList的结果 : {0}", iCount.ToString());
//取得结束时间并计算差值
 endTime = DateTime.Now;
 TimeSpan ts = endTime - startTime;
Console.WriteLine("使用ArrayList的耗时 :" + ts.TotalMilliseconds);
//★★★★★★★★②使用泛型类★★★★★★★★
 //使用List的泛型定义List<T>,int类型在编译器动态生成的类中本替换为int型
 //执行过程中不再执行装箱拆箱操作
 List<int> list2 = new List<int>();
startTime = DateTime.Now;
for (int i = 0; i < 1000000; i++)
 {
 list2.Add(i);
 }
iCount = 0;
 foreach (int i in list2)
 {
 iCount += 1;
 }
Console.WriteLine("使用泛型的结果 : {0}", iCount.ToString());
endTime = DateTime.Now;
 ts = endTime - startTime;
Console.WriteLine("使用泛型的耗时 :" + ts.TotalMilliseconds);
//显示三次结果如下
/* 第一次
 * 使用ArrayList的耗时 :92
 * 使用泛型的耗时 :25
 *
 * 第二次
 * 使用ArrayList的耗时 :96
 * 使用泛型的耗时 :22
 *
 * 第三次
 * 使用ArrayList的耗时 :90
 * 使用泛型的耗时 :22
 *
 * 由此可以明显看出两者的差别
 * 这里仅仅是时间上的,并不包括对内存消耗的统计
 *
 * ※但是也要注意到差别的单位是毫秒,
 * 我这里只想说明用泛型是有好处的,
 * 但也不可过分追求程序的孰优孰劣,
 * 总之要把握好这个度,适合自己的才是最好的
 * O(∩_∩)O~
 */
Console.Read();

ArrayList和LinkedList优缺点

java编程中我们用最多的几个类可以就是String,ArrayList,HashMap了.特别是ArrayList我们几乎无人不知,甚至有乱用的嫌疑了我们来看看ArrayList和LinkedList的区别.故名思意ArrayList是数组表,LinkedList是链接表.ArrayList的所有数据是在同一个地址上,而LinkedList的每个数据都拥有自己的地址.

我们来比较一下常用的数据的插入,数据的删除,数据的更新,数据查询.

数据插入 :比如在i节点插入一个新数据

   ArrayList:循环到i节点,插入一个新数据,然后把i节点后面的所有的数据的index加1. ->操作多

   LinkedList:循环到i节点,把前一个节点的后续链接到新数据,然后把新数据链接到后一个数据就可以了.  ->操作少

   结论:平均效率LinkedList要好.

数据删除 :比如删除i节点数据

   ArrayList:循环到i节点,然后把i节点后面的所有的数据的index减1. ->操作多

   LinkedList:循环到i节点,把前一个节点的后续链接到i节点的后一个数据就可以了.  ->操作少

   结论:平均效率LinkedList要好.

数据查询 :比如查询i节点数据

   ArrayList:循环到i节点. ->操作少

   LinkedList:循环到i节点.  ->操作少,但由于每个数据的地址不一样,查询比如 ArrayList慢.

   结论:平均效率 ArrayList要好.

数据更新 :比如更新i节点数据

   ArrayList:循环到i节点,把数据更新. ->操作少

   LinkedList:循环到i节点,把前数据更新.  ->操作少,但由于查询速度没有 ArrayList好,所有效率没有 ArrayList好.

   结论:平均效率ArrayList要好.

这样我们就可以看到各有优点.

如果查询操作较多ArrayList的效果更好.如果删除,插入较多LinkedList的效果较好.具体怎么用还看具体的需求.

时间: 2024-11-03 08:57:53

比较List和ArrayList的性能及ArrayList和LinkedList优缺点的相关文章

arraylist-android 怎么将一个ArrayList按照另一个ArrayList排序

问题描述 android 怎么将一个ArrayList按照另一个ArrayList排序 我现在有一个ArrayList A和一个ArrayList B,想将A按照B中数据的顺序排序,应该怎么做?求速度最快的方法! 解决方案 Android---对ArrayList排序一个小问题的解决-----怎样把dataset转化成arraylist将ArrayList中的元素深copy到另一个ArrayList中 解决方案二: ArrayList C=B: ArrayList D=A;然后 for(int

测试Arraylist平均性能

问题描述 给个思路 解决方案 解决方案二:他内部就是一个数组.啥叫平均性能啊.解决方案三:你可以存不同的数据类型来测试,速度解决方案四:引用2楼yate123的回复: 你可以存不同的数据类型来测试,速度 顶一个解决方案五:测试这个有什么意义呢?找个比较一起测试吧linkedlist?解决方案六:不错啊解决方案七:start=System.currentTimeMillis();//这里可以对ArrayList进行大量的增删改查操作//........end=System.currentTimeM

深入理解ArrayList 和 LinkedList 区别

ArrayList的内部实现是基于数组,因此,它使用get方法访问列表中的任意一个元素时,它的速度要比LinkedList快.LinkedList的内部实现是基于链表的,LinkedList中的get方法是按顺序从列表的一端到另一端.对LinkedList而言,只有这种查找方法. Bruca Eckel描述如下: Java编程思想对List的描述(4版P233): 基本的ArrayList,它长于随机访问,但是在List的中间插入和一处速度较慢. LinkedList,它通过代价较低的在List

JavaSE高级之集合类

​下面的内容是对java中的集合类进行的总结,过段时间会分享java的网路编程,多线程等内容,欢迎批评指正.   1.Java中的集合是用来存放对象的,即集合是对象的集合,对象是集合的元素,java API集合类位于java.util包中. 2.常用集合类: Collection接口,List接口, Set接口,Map接口.接口类结合泛型的使用 3.集合和数组的区别在于集合的长度是动态扩充的,数组中可以存放基本数据类型和引用数据类型,集合中只能存放引用数据类型. 4.java中的集合层次关系 接

正确使用ArrayList和LinkedList—性能的改进

USING ArrayList AND LINKEDLIST ArrayList and LinkedList are two Collections classes used for storing lists of object references. For example, you could have an ArrayList of Strings, or a LinkedList of Integers. This tip compares the performance of Ar

Java Collection笔记之ArrayList

1.前言 ArrayList 是一个数组队列,相当于动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口. ArrayList 继承了AbstractList,实现了List.它是一个数组队列,提供了相关的添加.删除.修改.遍历等功能. ArrayList实现了RandmoAccess接口,即提供了随机访问功能.RandmoAccess是java

.NET Framework源码研究系列之---ArrayList与LinkedList

在上一篇<.NET Framework源码研究系列之---马甲List>中我们一起研究了.NET中 List的源代码,也得到一些兄弟的热心反馈.其中一位仁兄说希望看到ArrayList与LinkedList源 代码,所以今天就以此为话题,大家一起看一下.NET中是如何实现ArrayList和LinkedList 的. 我们先看ArrayList和LinkedList在.NET中的位置,ArrayList的命名空间是 System.Collections,LinkedList的命名空间是Syst

ArrayList源码分析(jdk1.8)

前几天自我学习了ArrayList的源码,写了篇云笔记,现将其发布到博客,供大家学习交流,本人并非大神,如有任何问题,欢迎批评指正. 最初是看了这篇文章http://www.cnblogs.com/hzmark/archive/2012/12/20/ArrayList.html,不过是基于jdk1.6的,遂自己分析源码并写下此文,在此表示感谢.转载请注明出处,谢谢,http://blog.csdn.net/u010887744/article/details/49496093. ArrayLis

【Java集合系列】---ArrayList

开篇前言--ArrayList中的基本方法 前面的博文中,小编主要简单介绍java集合的总体架构,在接下来的博文中,小编将详细介绍里面的各个类,通过demo.对比,来对java集合类进行更加深入的理解和认识,希望可以帮助有有需要的小伙伴们`(*∩_∩*)′,不足之处,还请小伙伴们多多指教哦`(*∩_∩*)′.今天这篇博文,小编主要介绍List接口中的ArrayList集合,ArrayList即数组列表,so,她肯定和数组有一定的关系,我们知道List集合的特征有两个,一个是有序:第二个List里