人生低谷来撸C#--018集合(Collection)

1、概念 集合(Collection)

集合(Collections)是一组相关的对象,通常被用来存储和管理一组数据。提供了对栈(stack)、队列(queue)、列表(list)和哈希表(hash table)的支持。大多数集合类实现了相同的接口。服务于不同的目的,如为元素动态分配内存,基于索引访问列表项等等。这些类创建 Object 类的对象的集合。在 C# 中,Object 类是所有数据类型的基类。

集合提供了一种比数组更加灵活和强大的数据管理方式,因为通常提供了更多功能,比如动态调整大小、搜索、排序等。

你去超市购物,会推一辆购物车。在这个比喻中,购物车就是一个集合,它可以容纳各种各样的商品(对象)。当你在超市里走动时,你可以随时往购物车里添加商品(添加元素),也可以从购物车里取出商品(移除元素)。如果你发现购物车里的商品太多了,你可以决定不再购买某些商品,然后把它们放回货架上(删除元素)。这就是说的增,减,改,查里的几项。

现在,让我们将这个比喻应用到C#中的集合:

  • List<T>:这是一个非常常用的集合类型,可以看作一个可调整大小的数组。就像购物车一样,你可以随时添加或移除商品。List<T>允许你存储任何类型的对象,并且可以根据需要动态增长,它还提供了许多有用的方法来操作列表中的元素。

  • Dictionary<TKey, TValue>:这个集合类型类似于一个字典或电话簿,它存储键值对。在购物车的比喻中,你可以想象每件商品都有一个独特的标签(键),这样你就可以快速找到对应的商品(值)。Dictionary<TKey, TValue>允许你通过键快速查找值,这在需要高效查找数据的场景中非常有用。

  • Queue<T>:队列是一种先进先出(FIFO)的数据结构,就像你在超市收银台排队结账一样。最先进入队列的人(元素)会最先离开。Queue<T>常用于模拟现实世界中的排队情况,比如任务调度或者消息传递。

  • Stack<T>:栈是一种后进先出(LIFO)的数据结构,就像一堆盘子,你只能从顶部取盘子或者放盘子。最后放上去的盘子会最先被拿走。Stack<T>常用于撤销操作、表达式求值等场景。

  • HashSet<T>:这个集合类型类似于一个没有重复元素的列表,就像你不会在购物车里放两个完全相同的商品一样。HashSet<T>不允许重复元素,它提供了快速的查找和添加操作,非常适合于需要唯一性的场景。

这些集合类型都是泛型的,意味着你可以指定集合中元素的具体类型,这样可以获得更好的类型安全性和性能。C#中的集合就像是编程世界里的购物车、字典、队列、栈和集合,高效地管理和操作数据。通过选择合适的集合类型,让程序更加健壮和高效。

2、简单例子说明

通过一些简单的例子来说明C#中几种常见的集合类型:List<T>Dictionary<TKey, TValue>Queue<T>Stack<T>HashSet<T>

List<T>

List<T>是一个动态数组,它可以存储任意类型的对象,并且可以根据需要自动调整大小。

using System;
using System.Collections.Generic; 
 
class Program 
{
    static void Main() 
    {
        // 创建一个List<int> 
        List<int> numbers = new List<int>(); 
 
        // 添加元素
        numbers.Add(5);
        numbers.Add(10);
        numbers.Add(15); 
 
        // 遍历并打印元素 
        foreach (var number in numbers)
        {
            Console.WriteLine(number);
        } 
 
        // 移除元素
        numbers.Remove(10); 
 
        // 再次遍历并打印元素 
        foreach (var number in numbers)
        {
            Console.WriteLine(number); 
        }
    }
}
Dictionary<TKey, TValue>

是一个键值对的集合,它允许你通过键快速查找值。

using System;
using System.Collections.Generic; 
 
class Program 
{
    static void Main() 
    {
        // 创建一个Dictionary<string, int>
        Dictionary<string, int> ages = new Dictionary<string, int>(); 
 
        // 添加键值对
        ages.Add("Alice", 30);
        ages.Add("Bob", 25);
        ages.Add("Charlie", 35); 
 
        // 通过键查找值
        Console.WriteLine("Alice's age: " + ages["Alice"]); 
 
        // 移除键值对
        ages.Remove("Bob");
 
        // 检查是否包含某个键 
        if (!ages.ContainsKey("Bob"))
        {
            Console.WriteLine("Bob's age is not found."); 
        }
    } 
} 
Queue<T>

是一个先进先出的集合,常用于模拟排队的情况。

using System;
using System.Collections.Generic; 
 
class Program 
{
    static void Main() 
    {
        // 创建一个Queue<string>
        Queue<string> queue = new Queue<string>();
 
        // 入队
        queue.Enqueue("First");
        queue.Enqueue("Second");
        queue.Enqueue("Third"); 
 
        // 出队并打印
        while (queue.Count > 0)
        {
            Console.WriteLine(queue.Dequeue()); 
        }
    } 
} 
Stack<T>

是一个后进先出的集合,常用于模拟堆栈的情况。

using System;
using System.Collections.Generic; 
 
class Program 
{
    static void Main() 
    {
        // 创建一个Stack<string>
        Stack<string> stack = new Stack<string>();
 
        // 压栈
        stack.Push("Bottom");
        stack.Push("Middle");
        stack.Push("Top"); 
 
        // 弹栈并打印
        while (stack.Count > 0)
        {
            Console.WriteLine(stack.Pop()); 
        }
    }
} 
HashSet<T>

是一个无序的集合,它不允许重复的元素。

using System;
using System.Collections.Generic; 
 
class Program 
{
    static void Main() 
    {
        // 创建一个HashSet<int>
        HashSet<int> uniqueNumbers = new HashSet<int>(); 
 
        // 添加元素
        uniqueNumbers.Add(5);
        uniqueNumbers.Add(10);
        uniqueNumbers.Add(5); // 重复的元素不会被添加 
 
        // 遍历并打印元素 
        foreach (var number in uniqueNumbers)
        {
            Console.WriteLine(number); 
        } 
    } 
} 

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值