C#中的常用集合

发布于:2025-02-10 ⋅ 阅读:(101) ⋅ 点赞:(0)

目录

一、动态数组ArrayList

二、List

三、栈(Stack)

四、队列(Queue)

五、字典(Dictionary),int>


一、动态数组ArrayList

ArrayList 是 C# 中提供的一种动态数组类,位于命名空间 System.Collections 中。

动态数组(ArrayList)与普通数组不同,它的大小可以动态调整,无需预先定义固定长度。

动态数组(ArrayList)代表了可被单独索引的对象的有序集合,它也允许在列表中进行动态内存分配、增加、搜索、排序各项。

ArrayList 类适用于需要频繁调整大小的数组操作,但由于其非泛型特性,在现代 C# 开发中逐渐被 List<T> 替代。

具体来说ArrayList和List的区别在于ArrayList是一个非泛型集合,List是一个泛型集合,就是说ArrayList中可以存储任意类型的元素,而List只能包含制定类型的元素。

性能方面List更好

现在在C#中一般常用的都是List了,很少用到ArrayList

ArrayList 类的方法和属性

下表列出了 ArrayList 类的一些常用的 属性

属性名称 类型 描述
Count int 获取 ArrayList 中包含的元素数量。
Capacity int 获取或设置 ArrayList 的容量(存储空间)。
IsFixedSize bool 指示 ArrayList 是否具有固定大小。
IsReadOnly bool 指示 ArrayList 是否为只读。
IsSynchronized bool 指示 ArrayList 是否线程安全。
SyncRoot object 获取可用于同步访问的对象。

下表列出了 ArrayList 类的一些常用的 方法

方法名称 返回类型 描述
添加与插入
Add(object value) int 将对象添加到 ArrayList 的末尾,返回新元素的索引。
AddRange(ICollection c) void 将指定集合的所有元素添加到 ArrayList 的末尾。
Insert(int index, object value) void 在指定索引处插入对象。
InsertRange(int index, ICollection c) void 在指定索引处插入指定集合的所有元素。
删除
Remove(object value) void 移除首次出现的指定对象。
RemoveAt(int index) void 移除指定索引处的元素。
RemoveRange(int index, int count) void 移除从指定索引开始的指定数量的元素。
Clear() void 移除所有元素。
访问与查询
Contains(object item) bool 判断 ArrayList 是否包含指定对象。
IndexOf(object value) int 获取指定对象首次出现的索引。
LastIndexOf(object value) int 获取指定对象最后一次出现的索引。
排序与复制
Sort() void 按照默认顺序排序 ArrayList 中的元素。
Sort(IComparer comparer) void 按照自定义比较器排序。
Reverse() void 反转 ArrayList 中元素的顺序。
CopyTo(Array array) void 将 ArrayList 的元素复制到指定数组中。
其他
GetRange(int index, int count) ArrayList 获取从指定索引开始的指定数量的元素子集。
ToArray() object[] 将 ArrayList 中的元素复制到数组中。
TrimToSize() void 将容量调整为实际元素数量以节省内存。
 static void Main(string[] args)
        {
            ArrayList a = new ArrayList();
            a.Add("ioio");
            a.Add(12);
            a.Add(58.2f);
            for(int i = 0; i < a.Count; i++)
            {
                Console.WriteLine(a[i]);
            }
        }

二、List

static void Main(string[] args)
        {
            List<int> a = new List<int>();
            //添加元素
            a.Add(12);
            a.Add(13);
            a.Add(15);
            a.Add(18);
            a.Add(2);
            shuchu(a);
            //删除元素13
            a.Remove(13);
            shuchu(a);
            //删除索引1
            a.RemoveAt(1);
            shuchu(a);
            //获得指定对象首次出现的索引
            Console.WriteLine(a.IndexOf(12));
            //获得指定对象最后一处出现的索引位置
            Console.WriteLine(a.LastIndexOf(12));
            
        }
       static void shuchu(List<int> a)
        {
            //遍历List
            foreach(int i in a)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
        }

三、栈(Stack)

 static void Main(string[] args)
        {
            Stack<int> a = new Stack<int>();
            //进栈
            a.Push(1);
            a.Push(2);
            a.Push(3);
            a.Push(4);
            a.Push(5);
            //输出
            shuchu(a);

            //出栈
            a.Pop();
            //输出
            shuchu(a);
            //返回栈顶元素
            Console.WriteLine(a.Peek());
            
        }
       static void shuchu(Stack<int> a)
        {
            //遍历List
            foreach(int i in a)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
        }

四、队列(Queue)

在 C# 中,Queue 是一个先进先出(FIFO, First In First Out)数据结构。

Queue 属于 System.Collections 或 System.Collections.Generic 命名空间,分别提供非泛型和泛型版本的实现。Queue 适用于需要按照入队顺序处理数据的场景。

队列(Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。

特性

  • 先进先出:最早加入队列的元素最先被移除。
  • 动态大小:队列的容量会根据需要动态调整。
  • 泛型支持:通过 Queue<T> 可以存储强类型的元素。
  • 线程安全:Queue 本身不是线程安全的,但可以使用 ConcurrentQueue<T> 实现线程安全。
 static void Main(string[] args)
        {
            Queue<int> a = new Queue<int>();
            //添加元素进入队列中
            a.Enqueue(1);
            a.Enqueue(2);
            a.Enqueue(3);
            a.Enqueue(4);
            a.Enqueue(5);
            //输出
            shuchu(a);
            //删除先进的
            a.Dequeue();
            //输出
            shuchu(a);
            //返回队列开头的元素
            Console.WriteLine("队列开头元素=" + a.Peek());
            //确定某个元素是否在队列中
            Console.WriteLine(a.Contains(13));
            //清空队列中的元素
            a.Clear();
        }
       static void shuchu(Queue<int> a)
        {
            //遍历List
            foreach(int i in a)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
        }

五、字典(Dictionary<string,int>)

static void Main(string[] args)
        {
            Dictionary<string, int> a = new Dictionary<string, int>();
            //向字典中添加元素
            a.Add("第一个键", 11);
            a.Add("第二个键", 2);
            a.Add("第三个键", 3);
            a.Add("第四个键", 4);
            a.Add("第五个键", 5);
            shuchu(a);

            //确定字典中是否含有指定的键
            Console.WriteLine(a.ContainsKey("第一个键"));

            //确定字典中是否含有指定的值
            Console.WriteLine(a.ContainsValue(100));

            //将带有指定键的键值对给删除,根据键删除
            a.Remove("第一个键");
            shuchu(a);

            //返回一个键的集合
            var key = a.Keys;//同样的还可以返回一个值的集合,方法是Values
            foreach(var i in key)
            {
                Console.WriteLine(i);
            }
        }
       static void shuchu(Dictionary<string,int> a)
        {
            //遍历字典中的数据
            foreach(var d in a)
            {
                Console.WriteLine("键="+d.Key + " 值=" + d.Value);
            }
            return;
        }