首先,先说明一下,LinkedList<T>其实是一个双向链表:

一个LinkedList<T>对象其实就是一系列LinkedListNode<T>对象的集合。每一个LinkedListNode<T>对象都可以访问下一个和前一个LinkedListNode<T>对象,其值是通过value属性访问的。

现在,开始我们的性能比较:List<T>类的性能优于LinkedList<T>类。

增加 删除
在List<T>中增加、删除节点的速度,大体上快于使用LinkedList<T>时的相同操作。将 List<T>.Add方法和LinkedList<T>的Add*方法相比较,真正的性能差别不在于Add操作,而在LinkedList<T>在给GC(垃圾回收机制)的压力上。一个List<T>本质上是将其数据保存在一个堆栈的数组上,而LinkedList<T>是将其所有节点保存在堆栈上(人家是一个,我是一系列)。这就使得GC需要更多地管理堆栈上LinkedList<T>的节点对象。注意,List<T>.Insert*方法比在LinkedList<T>中使用Add*方法在任何地方添加一个节点可能要慢。然而,这个依赖于List<T>插入对象的位置。Insert方法必须使所有在插入点后面的元素往后移动一位。如果新元素被插在List<T>最后或接近最后的位置,那么相对于GC维护LinkedList<T>节点的总的开销来说,其开销是可以被忽略的。

索引
另一个List<T>性能优于LinkedList<T>的地方是你在使用索引进行访问的时候。在List<T>中,你可以使用索引值(indexer)直接定位到某个具体的元素位置。而在LinkedList<T>中,却没有这样的奢侈品。在LinkedList<T>中,你必须通过Previous或Next属性遍历整个List,直到找到你想要的节点。

搜索 查找
在搜索某个元素或节点的时候,List<T>的性能也优于LinkedList<T>。相比于LinkedList<T>的Contains,Find,和FindLast方法,List<T>.BinarySearch方法在找元素方面更快。这次因为LinkedList<T>使用的是线性查找,而List<T>使用的是Binary Search。简单地说,Binary Search利用List<T>中的元素已排过序,这需要在调用BinarySearch方法之前先调用Sort方法(请注意,如果有任何新的元素被添加进来,那么Sort方法必须被重新调用)。接下去的查找就是Binary Search的算法了,我就不再赘述了!

转载于:https://www.cnblogs.com/adaiye/archive/2008/02/22/List_and_LinkedList.html

【C#食谱】【面食】菜单4:List相关推荐

  1. 学校食堂简易点餐管理系统(含用户登录且密码隐藏)C++

    系统运行步骤陈述: 运行程序进入用户登陆界面,输入账户及密码 如果账户以及密码输入正确则进入系统,显示登陆成功 紧接着以下须按照指示输入,所输入字母不区分大小写 进入系统后便可看见菜单选项,a,b,c ...

  2. 如何制作营养膳食计算器_如何通过构建自动膳食计划器节省时间和金钱

    如何制作营养膳食计算器 使用Google Calendar和Google Sheets API在正确的日子选择正确的食谱. (Use the Google Calendar and Google Sh ...

  3. 盘点那些你没怎么见过的手机软件,必不可少APP!

    手机安装了不少APP吧?有些APP不经常用的话,它可以光荣下岗了,接下来为你们分享几款神仙级的APP,是否好用自己去试试就知道啦! 纸条作文 这款软件主要是分享给,还在为些作文想破脑袋的学生党,如果你 ...

  4. 《人机交互与戏剧表演:用戏剧理论构建良好用户体验》一1.2 抛开包袱

    本节书摘来自华章出版社<人机交互与戏剧表演:用戏剧理论构建良好用户体验>一书中的第1章,第1.2节,作者 (美)Brenda Laurel,更多章节内容可以访问云栖社区"华章计算 ...

  5. 【C#食谱】【面食】菜单7:用默认值初始化泛型变量

    问题:ee6d64b9 你有一个泛型类包含一个由类自身定义类型参数的变量.由于对泛型对象的约束,你希望这个变量被初始化为其默认值. 解决方法: 非常简单的方法:只要使用default关键字初始化其值为 ...

  6. APPENDIX B-菜单计划和食谱-Pagano博士的七天菜单计划样例-未完待续

    本篇翻译书中的APPENDIX B 也就是著名的Pagano饮食 日期 早餐 午餐 晚餐 第1天 •炖无花果 •燕麦肉桂热蛋糕** •热柠檬水.花草茶或不含咖啡因的黑咖啡 •豆腐菠菜汤* •查尔顿金枪 ...

  7. 食谱菜单系统(通用版).exe

    使用<食谱菜单系统>可直观地进行点餐并统计菜单数据,为食谱制定提供参考和辅助.主要具有菜单选择功能.数据统计功能和食谱编辑功能. 1.菜单选择功能:单击菜单标签即可进行选择,再次单击则可取 ...

  8. 【C#食谱】【杭帮菜】菜单2:写一个TCP客户端

    问题: 你想连接基于TCP的服务端. 解决方法: 使用System.Net.TcpClient类,通过给服务端传递地址和端口来和服务端建立连接和会话.下面这个例子将和上一菜单中的服务端进行会话. cl ...

  9. 1周岁的宝宝营养食谱(3)

    小宝宝要回家了,我又得准备她的食物,还好有了网络,好东西大家一起分享! 10-12个月 这个时期的宝宝要一日三餐'可以吃丁块固体食物'以乳类为主渐渐过渡到以谷类食物为主'每日吃2次奶和3顿主食.现在宝 ...

最新文章

  1. 一次linux服务器load高达600多的异常处理过程
  2. 青岛智能物联网产才融合中心成立,山东大学携手百度飞桨海尔海纳云等共育AI人才
  3. 记一些暂未找到解决方案的问题 -- 持续更新
  4. 几款开源富文本编辑器优缺点比较
  5. win10计算机启动一分钟重启,Win10开机提示电脑将在一分钟后自动重启怎么办?...
  6. VBoxManage获取虚拟机IP地址
  7. 太极怎么用html写出来,如何用css实现太极图
  8. 小白python自学—报错问题汇总(持续更新)
  9. c语言ch能储存多少字符,二级c语言程序设计习题与解答ch5-7函数字符(11页)-原创力文档...
  10. 数据结构与算法 —— 动态数组
  11. TS文件合并,这里提供了一点小思路。
  12. 帮你解决0xc0150002
  13. excel 姓名汉字转拼音
  14. 最容易月薪过万城市排名出炉!
  15. 简单神经网络手算笔记
  16. 动态规则最佳入门(转)
  17. 国际期货和国内期货的区别带招商
  18. yxc_第二章 数据结构(一)_栈和队列
  19. 我的世界java笔刷指令_原版创世神刷子工具命令方块指令分享
  20. element-ui的走马灯详解

热门文章

  1. android4.4的手机,更加流畅 已搭载安卓4.4系统手机盘点
  2. android 高版本(设备11的)wifi扫描,获取wifi列表
  3. JS——修改背景图片
  4. 小明走格子 (10 分)(Java)
  5. java 迁移数据_Java 10迁移:轻而易举还是龙卷风?
  6. 工资条群发神器,HR必备!!!
  7. 纯手工解密几大在线js加密网站(3)
  8. 接触角的计算----寻找气液固三相的交点
  9. 10天GMV破500万,品牌在快手的经营方法论是什么?
  10. 两天学完软件测试工程师所需的MySQL数据库技术