关于C#中的HashSet<T>与List<T>

这篇具有很好参考价值的文章主要介绍了关于C#中的HashSet<T>与List<T>。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HashSet<T>

表示值的集合。这个集合的元素是无须列表,同时元素不能重复。由于这个集合基于散列值,不能通过数组下标访问。

List<T>

表示可通过索引访问的对象的强类型列表。内部是用数组保存数据,不是链表。元素可重复,是有序列表,根据调用add的时间先后进行排序。每次添加删除操作会重新排序。例如有100个元素,删除掉下标99的元素后,无法再通过下标99访问数据。

性能分析

HashSet对数据的检索效率(contains函数)比List 快。HashSet存储数据时将数据通过散列函数直接映射到地址,所有取值时可以直接取到,时间复杂度为O(1)。List检索时需要一个个的进行值比较,最多需要比较到数组末尾,时间复杂度为O(n),n为元素个数。

实例分析
public static void Test()
{
    int dataCount = 10;  //数据个数
    int loopCount = 10000000; //循环次数

    Stopwatch sw = new Stopwatch();

    HashSet<int> hash = new HashSet<int>();
    List<int> list = new List<int>();
    list.AddRange(Enumerable.Range(0, dataCount)); 
    //list.Select(x => hash.Add(x));

    for (int i = 0; i < dataCount; i++)
    {
        hash.Add(i);
    }


    sw.Restart();
    for (int i = 0; i < loopCount; i++)
    {
        hash.Contains(999999);
    }
    sw.Stop();
    Console.WriteLine("HASH:" + sw.ElapsedMilliseconds);


    sw.Restart();
    for (int i = 0; i < loopCount; i++)
    {
        list.Contains(999999);
    }
    sw.Stop();
    Console.WriteLine("LIST:" + sw.ElapsedMilliseconds);

    sw.Restart();
    for (int i = 0; i < loopCount; i++)
    {
        hash.Add(999999999);
        hash.Remove(999999999); 
    }
    sw.Stop();
    Console.WriteLine("HASH:" + sw.ElapsedMilliseconds);


    sw.Restart();
    for (int i = 0; i < loopCount; i++)
    {
        list.Add(99999909);
        list.Remove(99999909);
    }
    sw.Stop();
    Console.WriteLine("LIST:" + sw.ElapsedMilliseconds);

}

当数据量较小时,list的增加删除性能有优势,当数据量较大,则hashset的性能有巨大优势

数据量10

关于C#中的HashSet<T>与List<T>,.net core,语法,C#,c#,开发语言

数据量50 

关于C#中的HashSet<T>与List<T>,.net core,语法,C#,c#,开发语言

数据量1000

关于C#中的HashSet<T>与List<T>,.net core,语法,C#,c#,开发语言

数据量10000

关于C#中的HashSet<T>与List<T>,.net core,语法,C#,c#,开发语言文章来源地址https://www.toymoban.com/news/detail-819838.html

到了这里,关于关于C#中的HashSet<T>与List<T>的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于微软NET家族族谱将讲解 关于 最全.NET Core、NET 5、NET 6和.NET 7简介和区别

    不知道从什么时候开始,.NET 出来了越来愈多的名词 ,Visual Studio 版本从2000 一直到了 现在2022 ,中间陆续出来十多个版本,到后面 vscode ,底层 .NET 名称也是越来越花里胡哨的 从.NET FrameWork 1.0到 .net core 到 .NET  5 ,还有各种SDK 啥玩意的,最主要的是 市面上用.NET的公司不多,

    2024年01月18日
    浏览(33)
  • 【.NET Core】C#预处理器指令

    预处理器指令 是指编译器在实际编译开始之前对信息进行预处理。通常是简化源程序在不同的环境中运行。尽管编译器没有单独的预处理器,但是本文所说的指令的处理方式与有预处理器时一样。可以使用这些指令来帮助条件编译。不同于C和C++指令,不能使用这些指令来创

    2024年01月17日
    浏览(29)
  • C# .NET CORE .NET6 RSA 公钥加密 私钥解密

    环境说明: .NET CORE 版本:.NET 6 。   .NET CORE 对于RSA的支持: 1. .NET 6 中内置了对 PKCS1,PKCS8 2种私钥格式的支持。 2. 如果你要部署在Linux,docker ,k8s 中;一定要用 “RSA”这个类,不能是 .NET FRAMEWORK 的 RSACryptoServiceProvider。 3. .NET 中默认加密算法为“RSA/ECB/PKCS1Padding” ,要和JAVA互通

    2024年02月08日
    浏览(71)
  • C# 静态构造函数未执行 .net core框架

    代码如下,在执行Encoding.GetEncoding(“gb2312”);方法后报错,说没有找到对应编码,经测试,发现是静态构造函数未执行。 将代码改成这样就恢复正常了: 推测是编译器认为静态构造函数无用,被优化掉了。 也可能是静态函数的调用方式并非在类加载时调用,而是在实例化

    2024年02月10日
    浏览(29)
  • 【C#】.net core 6.0 依赖注入生命周期

    给自己一个目标,然后坚持一段时间,总会有收获和感悟! 对于.net core而言,依赖注入生命周期有三种瞬态(Transient)、作用域(Scoped)和单例(Singleton),无论使用哪种生命周期,都需要确保对象的线程安全性,并正确地处理依赖关系。 在了解依赖注入的生命周期前,我

    2024年02月03日
    浏览(38)
  • 【c#,.NET】Entity Framework Core基础详解

    目录   一、EF Core概述 1.1 什么是ORM?  1.2 EF Core的性能怎么样  二、EF Core入门 2.1 什么是Migration数据库迁移: 2.2  EF Core数据的增删改查 2.2.1 增加数据 2.2.2 查询数据  2.2.3 修改和删除数据 三、EF Core的实体类配置 3.1 约定大于配置 3.2 EF Core两种配置方式 3.2.1 Data Annotation 3.2.2 

    2024年02月04日
    浏览(52)
  • 关于ASP.NET Core WebSocket实现集群的思考

    前言     提到 WebSocket 相信大家都听说过,它的初衷是为了解决客户端浏览器与服务端进行双向通信,是在单个 TCP 连接上进行全双工通讯的协议。在没有WebSocket之前只能通过浏览器到服务端的请求应答模式比如轮询,来实现服务端的变更响应到客户端,现在服务端也可以主

    2024年04月14日
    浏览(35)
  • C# .Net Core log4net 使用方法

    一、背景 前排提示,觉得墨迹的朋友可以直接看解决方法部分! 啊,许久没有这般耗时耗力了。。。鼓捣了一下午,不断地查阅资料,终于成功把log4net配置成功了。不过,笔者对log4net的底层并不了解,这里只是简单记录学习过程,给同样的初学者提供些许方便。 二、探索

    2024年02月04日
    浏览(36)
  • 【服务器】ASP.Net Core(C#)创建Web站点

    简单几步实现本地ASP.Net.Core web 站点结合cpolar内网穿透工具实现远程访问 1. 创建站点 *环境搭建,这边测试,使用.NET 6.0 SDK,可以点击跳转到官网下载,下载后安装即可. 安装完成后,进入到某个文件夹,打开powershell执行下面命令,创建新的 Web 应用,名称叫:aspnetcoreapp 2. 运行站点 信任开

    2024年02月11日
    浏览(39)
  • 【C# .NET 】使用 Entity Framework Core 操作sqlite数据库

    添加包 EF Core design package   NuGet Gallery | Home 使用用于 EF Core 迁移和现有数据库中的反向工程(基架)的工具需要安装相应的工具包: 可在 Visual Studio 包管理器控制台中使用的 PowerShell 工具的 Microsoft.EntityFrameworkCore.Tools 跨平台命令行工具的 dotnet-ef 和 Microsoft.EntityFramewor

    2024年02月14日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包