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线程安全,以便于您获取更多的相关知识。

转载于:https://www.cnblogs.com/Seachal/p/7113085.html

比较List和ArrayList的性能及ArrayList和LinkedList优缺点相关推荐

  1. java arraylist和list_Java中ArrayList和LinkedList区别

    原文链接:http://pengcqu.iteye.com/blog/502676 一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据 ...

  2. Java List与ArrayList 的区别(List list =new Arraylist(); ArrayList<String> arrayList = new ArrayList())

    一般想知道List 与ArrayList 的区别可能大部分都是看到了 List list = new ArrayList(); 和 ArrayList arrayList = new ArrayLis ...

  3. java arraylist 源代码_java中ArrayList的源代码是什么

    展开全部 package java.util; public class ArrayList extends AbstractList implements List, RandomAccess, C ...

  4. ArrayList clone()– ArrayList深拷贝和浅拷贝

    示例程序以ArrayList克隆方法为例. 学生对象上的ArrayList深层复制和浅层复制示例. 1.简介 ArrayList clone()– ArrayList深复制和浅复制 . ArrayLi ...

  5. Lession11 集合和泛型(ArrayList方法、Arraylist类、ArrayList添加对象、ArrayList长度、HashTable类、Hashtable类练习-----)

    目录 ArrayList方法: ArrayList添加对象: Arraylist类: ArrayList长度: HashTable类: Hashtable类练习: IComparable泛型接口排序: ...

  6. arraylist java 排序_「arraylist排序」java ArrayList的两种排序方法 - seo实验室

    arraylist排序 1.ArrayList使用排序的初衷 我们知道ArrayList的好处是可以不用限定容器的大小,他会根据元素的增加自己扩大.但是存储进去的数据类型都会变成object,虽然每个 ...

  7. Java基础(19)数据结构概述、ArrayList集合、Vector集合、LinkedList集合、集合框架练习

    1. 数据结构概述 1. 数据结构的概述:数据结构就是数据存储的方式 2. 常见数据结构:栈,队列,数组,链表,二叉树,哈希表 3. 栈和队列 (1)栈:先进后出,后进先出 (2)队列:先进先出,后进 ...

  8. java中Array和ArrayList区别 可以将 ArrayList想象成一种会自动扩增容量的Array

    java中Array和ArrayList区别 1)精辟阐述: 可以将 ArrayList想象成一种"会自动扩增容量的Array https://blog.csdn.net/ywjy10280 ...

  9. java arraylist comparable_Java 两种ArrayList集合自定义对象属性排序,Comparator接口 或 Comparable接口...

    1,Comparator接口 -- 重写Comparator public class User { private String id; private String name; public Us ...

  10. Java的ArrayList集合_JAVA之ArrayList集合

    /** * ArrayList集合讲解 * 集合的添加.遍历.删除 */ package com.test; import java.util.*; public class test7 { /** ...

最新文章

  1. tmux的使用方法和个性化配置
  2. Mysql8.0.20下载和安装
  3. 4.1.7 文件共享
  4. ios字典存bool_#iOS 打印中文字典,数组,控制台输出中文,并保持缩进格式
  5. AI最后--热门游戏引擎(CN地区)
  6. Bandicam_v4.6.5便携特别版 高清视频录制工具
  7. 基于Servlet3.0的编程式SpringMVC实例详解
  8. zabbix详解(十五)——zabbix proxy配置实战
  9. 操作系统学习笔记以及个人见解
  10. 南京江北新区科创园非常漂亮
  11. 72个炫酷的CSS技巧
  12. 云脉高效数字化档案管理
  13. 新《古惑仔》 —— 神转折大赛
  14. 西安邮电大学计算机学院研究生分数,2020西安邮电大学考研复试分数线已公布...
  15. 【OPENCV_系列电子PDF图书连载】计算机视觉从入门到精通完整学习路线专栏
  16. 电脑 耳机播放声音,左右耳朵不平衡解决方法
  17. 【论文导读】-GCLSTM graph convolution embedded LSTM for dynamic network link prediction用于动态网络边预测的图卷积嵌入LSTM
  18. appcomat_v7报错解决方案
  19. 第七部分: 分析监管、安全与隐私管理和信息生命周期监管
  20. tcp协议的三次握手

热门文章

  1. indesign软件教程,如何将文本格式保存为样式?
  2. 【iOS报错】“Internal error. Please file a bug at bugreport.apple.com and attach /var/folders/v5/......”
  3. ReiBoot Pro for Mac(iOS系统修复软件)
  4. mac系统怎么获取最高权限删除顽固文件?
  5. C++ 的异常处理解答
  6. 如何将Blocs v2项目迁移到Blocs v3?
  7. 如何使用Aiseesoft Mac FoneTrans传输和管理iOS文件
  8. 35.5. array route
  9. 微信企业号支付个人php实现
  10. linux的引导过程和服务控制