返回顶部
首页 > 资讯 > 精选 >List<T>搜索和排序中的方法有什么不不同
  • 395
分享到

List<T>搜索和排序中的方法有什么不不同

2023-06-17 17:06:54 395人浏览 独家记忆
摘要

本篇内容介绍了“List<T>搜索和排序中的方法有什么不不同”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在.net 1.1时,

本篇内容介绍了“List<T>搜索和排序中的方法有什么不不同”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

.net 1.1时,我还有很多和我一样的程序员,都会常用到ArrayList,当时要想对这种集合元素进行查找,大多会采用for循环来完成,当然也可以采用BinarySearch 方法。但自从有了.NET 2.0以及.NET 3.5后,ArrayList就已经很少使用了,大家都认为List<T>在性能上要优越于ArrayList。既然有了List<T>,有了LINQ,对于LIST<T>集合的查询就不再单一。我这里列举三种方法:它们共同完成一件事,在一个Person的集合中,查找编号大于50000的元素。Person类定义如下:

public class Person  {      public string firstName      { get; set; }      public string lastName      { get; set; }      public int ID      { get; set; }  }

先构造一个Person的泛型集合。当然一般情况下不会有这样的大集合,但为了比较不同方法的搜索性能,这是有必要的。

List<Person> list = new List<Person>();  for (int i = 0; i < 100001; i++)  {      Person p = new Person();      p.firstName = i.ToString() + "firstName";      p.lastName = i.ToString() + "lastName";      list.Add(p);   }

1:List<T>提供的FindAll方式。  

public class FindPerson  {      public string firstName;      public FindPerson(string _firstName)      { this.firstName = _firstName; }      public bool PersonPredicate(Person p)      {          return p.ID >= 50000;      }  }  Stopwatch sw = new Stopwatch();  sw.Start();  List<Person> persons = list.FindAll(new Predicate<Person>(fp.PersonPredicate));  sw.Stop();  Response.Write("Find方法搜索用时" + sw.ElapsedMilliseconds.ToString() + "<br/>");

2:传统的for循环。 

sw.Start();  List<Person> newPersons = new List<Person>();  for (int j = 0; j < list.Count; j++)  {      if (list[j].ID  >= 50000)      {          newPersons.Add(list[j]);       }  }  sw.Stop();  Response.Write("for循环搜索用时" + sw.ElapsedMilliseconds.ToString() + "<br/>");

3:LINQ方式查询。 

sw = new Stopwatch();  sw.Start();  var pn = (from m in list            where m.ID >=50000            select m).ToList <Person >();  sw.Stop();  Response.Write("linq搜索用时" + sw.ElapsedMilliseconds.ToString() + "<br/>");

输出结果:虽然用时差不多,但还是传统的for循环性能***,尽管写法上并无新意。FindAll我觉的有一点比较好的就是,如果针对List<Person>有很多种查询方式,(当然实际情况中Person类不会这么简单),把查询方式封闭在FindPerson类中比较好,这样在外部调用查询时会非常简单。如果是其它的方式,也可以封装,但明显在代码结构上要稍差。Linq方式的查询,在灵活性上我觉的比起前两种要差一些。

Find方法搜索用时5

for循环搜索用时4

linq搜索用时6

第二:再来看对List<T>的排序,这里比较List<T>提供的Sort方法和Linq方式的orderby。

Sort。这里先写一个自定义的比较类PersonComparer

public class PersonComparer : IComparer<Person>  {      public int Compare(Person x, Person y)      {          return x.ID.CompareTo(y.ID);      }   }

排序代码:

sw = new Stopwatch();  sw.Start();  list.Sort(new PersonComparer());  sw.Stop();  Response.Write("Sort排序用时" + sw.ElapsedMilliseconds.ToString() + "<br/>");

Linq方式。

sw = new Stopwatch();  sw.Start();  var pn = (from m in list           orderby m.ID descending            select m).ToList<Person>();  sw.Stop();  Response.Write("linq排序用时" + sw.ElapsedMilliseconds.ToString() + "<br/>");

输出结果:在排序上linq还是占有比较大的优势。

Sort排序用时670

linq排序用时195

“List<T>搜索和排序中的方法有什么不不同”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: List<T>搜索和排序中的方法有什么不不同

本文链接: https://lsjlt.com/news/291168.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • List<T>搜索和排序中的方法有什么不不同
    本篇内容介绍了“List<T>搜索和排序中的方法有什么不不同”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在.NET 1.1时,...
    99+
    2023-06-17
  • jQuery中attr和prop方法有什么不同
    小编给大家分享一下jQuery中attr和prop方法有什么不同,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!相比 attr,prop 是 1.6.1 才新出来的...
    99+
    2023-06-27
  • allowedOriginPatterns和allowedOrigins方法有什么不同
    allowedOriginPatterns 和 allowedOrigins 都是用来设置允许跨域请求的来源,其中 allowedOriginPatterns 是在 Spring 5.3 版本引入的新方法,而 allowedOrigins ...
    99+
    2023-08-17
    java 前端 开发语言
  • C#中Environment.Exit(0)和Environment.Exit()方法有什么不同
    在C#中,Environment.Exit(0)和Environment.Exit()方法都用于终止应用程序的执行,但它们之间有一些...
    99+
    2023-09-14
    C#
  • golang 函数和方法有什么不同?
    函数和方法是 go 语言中的两种不同概念。接收者: 函数没有接收者,而方法有接收者。可调用性: 函数只能通过类型名称调用,而方法可以通过类型或变量名称调用。访问控制: 函数只能访问参数和...
    99+
    2024-04-25
    方法 函数 golang
  • 在不同的搜索引擎中更好的优化网站的方法有哪些
    这篇文章主要介绍“在不同的搜索引擎中更好的优化网站的方法有哪些”,在日常操作中,相信很多人在在不同的搜索引擎中更好的优化网站的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”在不同的搜索引擎中更好的优...
    99+
    2023-06-10
  • PHP和Bash编程中的算法有什么不同?
    算法是计算机编程中不可或缺的重要组成部分。无论是PHP还是Bash编程,算法都是实现各种功能的关键。然而,PHP和Bash编程中的算法存在一些不同。在本文中,我们将探讨这些不同之处,并通过演示代码来进一步说明。 编程语言的不同 PHP...
    99+
    2023-06-26
    并发 bash 编程算法
  • python中的return和yield有什么不同
    这篇文章主要介绍“python中的return和yield有什么不同”,在日常操作中,相信很多人在python中的return和yield有什么不同问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python中...
    99+
    2023-06-20
  • PHP中的include和require有什么不同
    这篇文章主要讲解了“PHP中的include和require有什么不同”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中的include和require有什么不同”吧!在PHP中,有两种...
    99+
    2023-06-20
  • 理解PHP中的索引和关联数组有什么不同?
    PHP是一种广泛使用的服务器端编程语言,它提供了两种类型的数组:索引数组和关联数组。虽然这两种数组都可以用于存储数据,但它们之间有一些重要的区别。 索引数组是一种按数字索引顺序排列的数组。在这种数组中,每个元素都有一个数字索引,该索引从0开...
    99+
    2023-08-30
    索引 git npm
  • 页面刷新的reload()和refresh()方法有什么不同
    reload()方法用于重新加载当前页面,它会从服务器重新加载页面资源,并丢失当前页面的任何已更改的状态。换句话说,它会重新加载整个...
    99+
    2023-09-20
    不同
  • Java和C++的泛型程序设计有什么不同
    这篇文章主要讲解了“Java和C++的泛型程序设计有什么不同”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java和C++的泛型程序设计有什么不同”吧!泛型程序设计:   &nbs...
    99+
    2023-06-17
  • 小程序跟app的运营方式有什么不同
    这篇文章主要讲解了“小程序跟app的运营方式有什么不同”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“小程序跟app的运营方式有什么不同”吧!第一、差异性(一)小程序优势:背靠微信社交优势,具...
    99+
    2023-06-27
  • dismiss()与cancel()方法在Android项目中有什么不同
    本篇文章给大家分享的是有关dismiss()与cancel()方法在Android项目中有什么不同,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. public void c...
    99+
    2023-05-31
    android dismiss() cancel()
  • Java中final、finally和finalize关键字有什么不同的地方
    这篇文章给大家介绍Java中final、finally和finalize关键字有什么不同的地方,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。final当这个关键字修饰一个类时,意味着他不能派生出新的子类,也就是说不能被...
    99+
    2023-05-31
    java finally final
  • Java8和Scala中的Lambda表达式有什么不同
    本篇内容介绍了“Java8和Scala中的Lambda表达式有什么不同”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、为什么使用Lambd...
    99+
    2023-06-17
  • 使用imp导入表和索引至不同表空间的方法是什么
    使用imp导入表和索引至不同表空间的方法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。使用expdp/impdp方式将表和索引导入至不同表空间的方法导出:expdp&nb...
    99+
    2023-06-06
  • 对象导向编程在 PHP 和 Django 中的实现方法有什么不同?
    对象导向编程(OOP)是一种编程范式,它将程序中的所有内容都看作是对象,通过对象之间的互相调用和交互,来完成程序的功能。在 PHP 和 Django 中,OOP 的实现方法有些不同,下面将进行详细的分析和比较。 一、PHP 中的 OOP 实...
    99+
    2023-08-28
    django ide 对象
  • Java项目中使用 this()与super()方法有什么不同
    Java项目中使用 this()与super()方法有什么不同?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java this()和super()的使用注意使用super和th...
    99+
    2023-05-31
    java this() super()
  • Java中为什么不同的返回类型不算方法重载
    目录为什么不同返回类型不算方法重载?方法重载的使用场景方法重载匹配原则匹配原则1:精准类型匹配匹配原则2:基本类型自动转换成更大的基本类型匹配原则3:自动装/拆箱匹配匹配原则4:按照...
    99+
    2022-11-15
    Java返回类型 Java方法重载
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作