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

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

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

  1. paip.提升性能---list,arraylist,vector,linkedlist,map的选用..

    paip.提升性能---list,arraylist,vector,linkedlist,map的选用.. arraylist,vector基本一样,但是,vector线程安全的. 作者Attilax ...

  2. 关于for循环和Iterator遍历ArrayList的性能问题

    今日看到@DriveMan的一篇博客,题为<ArrayList集合实现RandomAccess接口有何作用?为何LinkedList集合却没实现这接口?>,文中提到对于实现了RandomA ...

  3. ArrayList(顺序表)和LinkedList(链表)的区别联系,优劣取舍问题

    ArrayList和LinkedList都是List接口的实现类.主要区别如下: 最主要的区别是底层的数据结构不同: 1)ArrayList相当于一个动态数组,需要随机访问列表中的元素时,ArrayL ...

  4. 为什么是List list = new ArrayList() 而不直接用ArrayList

    为什么是List list = new ArrayList(),而不直接用ArrayList? 编程是要面向对象编程,针对抽象(接口),而非具体.List 是接口,ArrayList是实现. 实现Li ...

  5. javase基础回顾(一)ArrayList深入解析 解读ArrayList源代码(JDK1.8.0_92)

    我们在学习这一块内容时需要注意的一个问题是 集合中存放的依然是对象的引用而不是对象本身. List接口扩展了Collection并声明存储一系列元素的类集的特性.使用一个基于零的下标,元素可以通过它们 ...

  6. 记录一下显示Map<String, ArrayList<String>>中的ArrayList里的数据的操作

    1.有以下数据: ArrayList<Employee> emp = new ArrayList<>(); emp.add(new Employee("zhang&q ...

  7. new ArrayList(0) 和 new ArrayList() 和一样吗?

    第一感觉是一样的,盲猜后者调用了前者,并传入参数 0.然而,无论是 JDK 7 还是 JDK 8,这两个方法构造的结果都是不一样的.JDK 开发人员在这方面作了优化. JDK 7 在 Java 7 中 ...

  8. 2.请介绍一下List和ArrayList的区别,ArrayList和HashSet区别

    第一问: List是接口,ArrayList实现了List接口. 第二问: ArrayList实现了List接口,HashSet实现了Set接口,List和Set都是继承Collection接口. A ...

  9. ArrayList深度分析:ArrayList和数组间的相互转换

    一.ArrayList转换为数组ArrayList提供public <T> T[] toArray(T[] a)方法返回一个按照正确的顺序包含此列表中所有元素的数组,返回数组的运行时类型就 ...

随机推荐

  1. 560. Subarray Sum Equals K 求和为k的子数组个数

    [抄题]: Given an array of integers and an integer k, you need to find the total number of continuous s ...

  2. 245. Shortest Word Distance III 单词可以重复的最短单词距离

    [抄题]: Given a list of words and two words word1 and word2, return the shortest distance between thes ...

  3. 20175234 《Java程序设计》第二周学习总结(二)

    学习内容总结 运算符与表达式 If语句.switch语句 break和continue语句 数组和for语句 IDEA的安装和调试 教材学习中的问题和解决过程 在第一次使用IDEA中出现了一些情况,在 ...

  4. vnc 搭建 转

    这里要注意,关闭selinux setenforce 0 原文地址: http://www.linuxidc.com/Linux/2015-04/116725.htm 这是一个关于怎样在你的 Cent ...

  5. ipcam

    ipcam也叫ip network camera,就是基于internet protocol的网络摄像机,同普通摄像头或者网眼的主要区别是ipcam实际上是一台视频服务器和摄像头的集成.ipcam只要 ...

  6. windows内核对象管理学习笔记

    目前正在阅读毛老师的<windows内核情景分析>一书对象管理章节,作此笔记. Win内核中是使用对象概念来描述管理内核中使用到的数据结构.此对象(Object)均是由对象头(Object ...

  7. Spring遇到的问题合集

    2018-09-15 元素 "tx:annotation-driven" 的前缀 "tx" 未绑定. 后来我加了 http://www.springframew ...

  8. Codeforces Round #539 (Div. 2) 异或 + dp

    https://codeforces.com/contest/1113/problem/C 题意 一个n个数字的数组a[],求有多少对l,r满足\(sum[l,mid]=sum[mid+1,r]\), ...

  9. 软件推荐-c#绘图插件echart

    首先给出官网:http://echarts.baidu.com/examples/ 简单的教程:http://www.cnblogs.com/youmeng/p/4874897.html

  10. okhttp 调用相机 上传服务器

    MainActivity package com.bwie.lianxi1; import android.content.Intent; import android.database.Cursor ...