比较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();java

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的效果较好.具体怎么用还看具体的需求.编程

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int , 数据 , arraylist , 效率 , 类型 时间 arraylist linkedlist、linkedarraylist、linkedlist、java linkedlist、linkedlist线程安全,以便于您获取更多的相关知识。数组

相关文章
相关标签/搜索