首页 > 编程语言 >C#中常用集合类型

C#中常用集合类型

时间:2024-08-01 13:18:27浏览次数:7  
标签:常用 Console 示例 C# item Add 集合 new

原文:C#中常用集合类型 - Y00 - 博客园 (cnblogs.com)

 

在C#中,集合是用于存储和操作一组数据项的数据结构。这些集合通常位于 System.CollectionsSystem.Collections.Generic 命名空间中。下面我将概述C#中几种常用的集合类型及其特点:

1. System.Collections 命名空间中的集合

这个命名空间中的集合类型不支持泛型,因此在编译时不检查类型安全性。这意味着在运行时可能会遇到类型转换错误。

  • ArrayList

    • 动态数组,可以存储任意类型的对象。
    • 缺乏类型安全性。
    • 提供了 Add, Insert, Remove, Sort, Reverse 等方法。
    • 示例:
      ArrayList list = new ArrayList();
      list.Add(1);
      list.Add("two");

       

  • Hashtable

    • 键值对集合,键必须是 object 类型。
    • 键必须唯一。
    • 缺乏类型安全性。
    • 提供了 Add, Remove, ContainsKey, ContainsValue 等方法。
    • 示例:
      Hashtable table = new Hashtable();
      table.Add("key", "value");

       

  • Stack

    • 后进先出 (LIFO) 集合。
    • 支持 PushPop 方法。
    • 示例:
      Stack<object> stack = new Stack<object>();
      stack.Push(1);
      stack.Push("two");
      object top = stack.Pop(); // "two"

       

  • Queue

    • 先进先出 (FIFO) 集合。
    • 支持 EnqueueDequeue 方法。
    • 示例:
      Queue<object> queue = new Queue<object>();
      queue.Enqueue(1);
      queue.Enqueue("two");
      object front = queue.Dequeue(); // 1

       

2. System.Collections.Generic 命名空间中的集合

这个命名空间中的集合类型支持泛型,因此可以确保类型安全性。

  • List

    • 动态数组,可以存储特定类型的对象。
    • 提供了 Add, Insert, Remove, Sort, Reverse 等方法。
    • 示例:
      List<int> numbers = new List<int>();
      numbers.Add(1);
      numbers.Add(2);

       

  • HashSet

    • 用于存储唯一元素的集合。
    • 提供了 Add, Remove, Contains 等方法。
    • 示例:
      var hashSet = new HashSet<string>();
      hashSet.Add("a");
      hashSet.Add("c");
      hashSet.Add("b");
      hashSet.Add("a");
      hashSet.Add("c");
      hashSet.Add("b");
      foreach (var item in hashSet)
      {
          Console.WriteLine(item);
      }
      /*输出结果
       a
       b
       c
       */

       

  • Dictionary<TKey, TValue>

    • 键值对集合,键和值都可以是特定类型。
    • 键必须唯一。
    • 提供了 Add, Remove, TryGetValue, ContainsKey 等方法。
    • 示例:
      Dictionary<string, int> scores = new Dictionary<string, int>();
      scores.Add("Alice", 90);
      scores.Add("Bob", 80);

       

  • SortedDictionary<TKey, TValue>

    • 键值对集合,按照键排序。
    • 键必须唯一。
    • 提供了 Add, Remove, TryGetValue, ContainsKey 等方法。
    • 示例:
      var sortDic = new SortedDictionary<int, string>();
      sortDic.Add(10, "十");
      sortDic.Add(5, "五");
      sortDic.Add(1, "一");
      Console.WriteLine(sortDic.Keys);
      foreach (var item in sortDic)
      {
          Console.WriteLine($"{item.Key}~{item.Value}");
      }
      /*输出结果
       1~一
       5~五
       10~十
       */

       

  • Queue

    • 泛型的先进先出 (FIFO) 集合。
    • 支持 EnqueueDequeue 方法。
    • 示例:
      var queue = new Queue<int>();
      queue.Enqueue(1);
      queue.Enqueue(2);
      queue.Enqueue(3);
      foreach (var item in queue)
      {
          Console.WriteLine(item);
      }
      Console.WriteLine($"dequeue元素:{queue.Dequeue()}");
      /*输出结果
       1
       2
       3
       dequeue元素:1
       */

       

  • Stack

    • 泛型的后进先出 (LIFO) 集合。
    • 支持 PushPop 方法。
    • 示例:
      var stack = new Stack<int>();
      stack.Push(1);
      stack.Push(2);
      stack.Push(3);
      foreach (var item in stack)
      {
          Console.WriteLine(item);
      }
      //pop元素
      Console.WriteLine($"pop元素:{stack.Pop()}");
      /*输出结果
       3
       2
       1
       pop元素:3
       */

       

  • LinkedList

    • 双向链表,适合频繁插入和删除的场景。
    • 支持 AddFirst, AddLast, RemoveFirst, RemoveLast 等方法。
    • 示例:
      var linkedList = new LinkedList<string>();
      linkedList.AddLast("2");
      linkedList.AddLast("3");
      linkedList.AddLast("5");
      
      linkedList.AddFirst("1");
      linkedList.AddBefore(linkedList.Find("5"), "4");
      
      foreach (var item in linkedList)
      {
          Console.WriteLine(item);
      }
      
      Console.WriteLine($"2前面的值:{linkedList.Find("2").Previous.Value}");
      Console.WriteLine($"2后面的值:{linkedList.Find("2").Next.Value}");
      
      /*输出结果
       1
       2
       3
       4
       5
       2前面的值:1
       2后面的值:3
       */

       

  标签: .NET , C# , 编程语言 , 集合 好文要顶 关注我 收藏该文 微信分享 Y00
粉丝 - 4 关注 - 1
会员号:1052     +加关注 4 0     升级成为会员   « 上一篇: 详解C#委托与事件

标签:常用,Console,示例,C#,item,Add,集合,new
From: https://www.cnblogs.com/Andy-Blog/p/18336460

相关文章

  • 题解:CF718A Efim and Strange Grade
    CF718AEfimandStrangeGrade题解算法贪心+模拟思路分析显然,要最优每一次进位就只能五入不能四舍。而且当我们五入时,要取位数最高的。比如说\(1.3535\),我们有两种进位方式,一种是进位成\(1.4\),一种是进位成\(1.354\),显然前者更优。那这道题给的次数有啥用呢?考虑一种“......
  • Apple Safari 17.6 - macOS 专属浏览器 (独立安装包下载)
    AppleSafari17.6-macOS专属浏览器(独立安装包下载)适用于macOSVentura和macOSMonterey的Safari浏览器17请访问原文链接:https://sysin.org/blog/apple-safari-17/,查看最新版。原创作品,转载请保留出处。之前Safari浏览器伴随macOS更新一起发布,需要系统更新才......
  • 探索npm、cnpm和yarn
    我们在使用前端包管理工具时经常见到npm、cnpm和yarn,那么他们之间有什么区别呢?使用方法是怎样的?我们来了解一下。npm(NodePackageManager):npm是Node.js的默认包管理器,用于安装、发布和管理JavaScript包。它是一个命令行工具,可以在终端中使用。npm有一个全球的包仓库,可......
  • Docker网络版安装
    一:准备工作通过uname-r命令查看你当前的内核版本Docker要求CentOS系统的内核版本在3.10以上,查看本页面的前提条件来验证你的CentOS版本是否支持Docker。二:部署安装1:使用root权限登录Centos。确保yum包更新到最新。yum-yupdate2:卸载旧版本(如果安装过旧......
  • C# & Unity 面向对象补全计划 之 接口
    本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正本系列旨在通过补全学习之后,给出任意类图都能实现并做到逻辑上严丝合缝1.接口在C#中,接口(interface)是一种定义了一组方法、属性和事件的类型接口只包含成员的声明,而不包含任何实现,实现接口的类必须......
  • 中文翻译《ASPICE in practice》之“SUP.8 配置管理”
    2.16SUP.8配置管理2.16.1目的配置管理流程的目的是建立和维护流程或项目的所有工作产品的完整性,并将其提供给相关各方。 在配置管理(CM)的背景下,配置管理系统至关重要。我们指的是一个或多个CM工具的组合,以支持物理存储和处理以及相关规则,例如指令、流程和约定;后者例......
  • 中文翻译《ASPICE in practice》之“ACQ.4 供应商监控”
    仅供参考,欢迎指正!2.1ACQ.4供应商监控2.1.1目的供应商监控过程的目的是根据商定的要求监控供应商的绩效。除了讨论供应商监控之外,这个过程还涉及与供应商的合作和沟通。合作的基础是选择供应商并且客户与供应商之间存在合同协议。MAN过程和SUP过程中的方法可应用于......
  • 【C++第十章】String
    【C++第十章】学习StringSTL介绍......
  • static关键字
    static关键字static关键字是什么?static是一个修饰符,用于修饰类的成员方法、类的成员变量,static关键字还有一个比较关键的作用就是用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行......
  • object类
    object类目录object类equals(Objectobj)方法hashCode()方法:toString()方法clone()方法getClass()方法wait()和notify()方法equals(Objectobj)方法用于比较两个对象的等价性。默认实现比较的是对象的内存地址,但通常需要重写这个方法以提供更有意义的比较逻辑。@Overridepubl......