比较List和ArrayList的性能及ArrayList和LinkedList优缺点
在使用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编程中我们用最多的几个类可以就是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优缺点的更多相关文章
- paip.提升性能---list,arraylist,vector,linkedlist,map的选用..
		
paip.提升性能---list,arraylist,vector,linkedlist,map的选用.. arraylist,vector基本一样,但是,vector线程安全的. 作者Attilax ...
 - 关于for循环和Iterator遍历ArrayList的性能问题
		
今日看到@DriveMan的一篇博客,题为<ArrayList集合实现RandomAccess接口有何作用?为何LinkedList集合却没实现这接口?>,文中提到对于实现了RandomA ...
 - ArrayList(顺序表)和LinkedList(链表)的区别联系,优劣取舍问题
		
ArrayList和LinkedList都是List接口的实现类.主要区别如下: 最主要的区别是底层的数据结构不同: 1)ArrayList相当于一个动态数组,需要随机访问列表中的元素时,ArrayL ...
 - 为什么是List list = new ArrayList() 而不直接用ArrayList
		
为什么是List list = new ArrayList(),而不直接用ArrayList? 编程是要面向对象编程,针对抽象(接口),而非具体.List 是接口,ArrayList是实现. 实现Li ...
 - javase基础回顾(一)ArrayList深入解析 解读ArrayList源代码(JDK1.8.0_92)
		
我们在学习这一块内容时需要注意的一个问题是 集合中存放的依然是对象的引用而不是对象本身. List接口扩展了Collection并声明存储一系列元素的类集的特性.使用一个基于零的下标,元素可以通过它们 ...
 - 记录一下显示Map<String, ArrayList<String>>中的ArrayList里的数据的操作
		
1.有以下数据: ArrayList<Employee> emp = new ArrayList<>(); emp.add(new Employee("zhang&q ...
 - new ArrayList(0) 和 new ArrayList() 和一样吗?
		
第一感觉是一样的,盲猜后者调用了前者,并传入参数 0.然而,无论是 JDK 7 还是 JDK 8,这两个方法构造的结果都是不一样的.JDK 开发人员在这方面作了优化. JDK 7 在 Java 7 中 ...
 - 2.请介绍一下List和ArrayList的区别,ArrayList和HashSet区别
		
第一问: List是接口,ArrayList实现了List接口. 第二问: ArrayList实现了List接口,HashSet实现了Set接口,List和Set都是继承Collection接口. A ...
 - ArrayList深度分析:ArrayList和数组间的相互转换
		
一.ArrayList转换为数组ArrayList提供public <T> T[] toArray(T[] a)方法返回一个按照正确的顺序包含此列表中所有元素的数组,返回数组的运行时类型就 ...
 
随机推荐
- 使用chrome浏览器无法访问github提示不是私密连接且无继续前往选项
			
在hosts文件中添加如下内容: 192.30.253.112 github.com192.30.253.119 gist.github.com151.101.100.133 assets-cdn.g ...
 - 机器学习性能指标(ROC、AUC、召回率)
			
混淆矩阵 构造一个高正确率或高召回率的分类器比较容易,但很难保证二者同时成立 ROC 横轴:FPR(假正样本率)=FP/(FP+TN) 即,所有负样本中被分错的比例 纵轴:TPR(真正样本率)=TP/ ...
 - Python开发【第五篇】:模块
			
递归的案例:阶乘 1*2*3*4*5*6*7- def func(num): if num == 1: return 1 return num * func(num - ...
 - eclipse删除了文件,找回方法
			
本人通过eclipse在前段时间上传svn代码的时候,代码掉完了,导致的原因是:svn服务器上有有个一样的文件夹,只是大小写不同,但是svn会认为是一样的文件夹,导致svn[]判别不了传到哪个文件夹去 ...
 - [leetcode]95. Unique Binary Search Trees II给定节点形成不同BST的集合
			
Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ...
 - jdk1.8 HashMap的实现
			
在了解HashMap之前,我们先进行位运算知识的补充 1.Java 位运算:(都是二进制的运算) << :相当于乘以2的倍数 --->1<<4 =1*2*2*2*2 ...
 - 微信小程序之 -----事件
			
事件分类 1. 冒泡事件: 当一个组件上的事件被触发后,该事件会向父节点传递. 2. 非冒泡事件: 当一个组件上的事件被触发后,该事件不会向父节点传递. 常见的冒泡 ...
 - POI2015 解题报告
			
由于博主没有BZOJ权限号, 是在洛咕做的题~ 完成了13题(虽然有一半难题都是看题解的QAQ)剩下的题咕咕咕~~ Luogu3585 [POI2015]PIE Solution 模拟, 按顺序搜索, ...
 - 20172306 2018-2019 《Java程序设计与数据结构》第一周学习总结
			
20172306 2018-2019 <Java程序设计与数据结构(下)>第一周学习总结 教材学习内容总结 第一章 概述 (程序=数据结构+算法 软件=程序+软件工程) 1.1 软件质量 ...
 - Blast
			
NCBI 教程:https://www.ncbi.nlm.nih.gov/books/NBK279681/ 本地使用 blast 的步骤 1. 构建本地数据库索引 $makeblastdb -in h ...