概述C#中各种类型集合的特点

在C#中,集合是用于存储和操作一组数据项的数据结构。这些集合通常位于 System.Collections 和 System.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) 集合。
- 支持
Push和Pop方法。 - 示例:
Stack<object> stack = new Stack<object>();
stack.Push(1);
stack.Push("two");
object top = stack.Pop(); // "two"
Queue
- 先进先出 (FIFO) 集合。
- 支持
Enqueue和Dequeue方法。 - 示例:
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等方法。 - 示例:
HashSet<int> uniqueNumbers = new HashSet<int>();
uniqueNumbers.Add(1);
uniqueNumbers.Add(2);
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等方法。 - 示例:
SortedDictionary<string, int> sortedScores = new SortedDictionary<string, int>();
sortedScores.Add("Alice", 90);
sortedScores.Add("Bob", 80);
Queue
- 泛型的先进先出 (FIFO) 集合。
- 支持
Enqueue和Dequeue方法。 - 示例:
Queue<int> queue = new Queue<int>();
queue.Enqueue(1);
queue.Enqueue(2);
int front = queue.Dequeue(); // 1
Stack
- 泛型的后进先出 (LIFO) 集合。
- 支持
Push和Pop方法。 - 示例:
Stack<int> stack = new Stack<int>();
stack.Push(1);
stack.Push(2);
int top = stack.Pop(); // 2
LinkedList
- 双向链表,适合频繁插入和删除的场景。
- 支持
AddFirst,AddLast,RemoveFirst,RemoveLast等方法。 - 示例:
LinkedList<int> list = new LinkedList<int>();
list.AddLast(1);
list.AddLast(2);
概述C#中各种类型集合的特点的更多相关文章
- 向集合中添加自定义类型--建议在自定义类型的时候要重写equals方法
package com.bjpowernode.t01list; import java.util.ArrayList; /* * 向集合中添加自定义类型 */public class TestLis ...
- 强大的Guava中的新集合类型: Multiset, Multimap, BiMap, Table, ClassToInstanceMap, RangeSet, RangeMap等
一 Multiset /** * 新类型集合: Multiset: Multiset就是可以保存多个相同的对象,并且无序 * 占据了List和Set之间的一个灰色地带 * 其他实现: TreeMult ...
- 【转】Python数据类型之“序列概述与基本序列类型(Basic Sequences)”
[转]Python数据类型之“序列概述与基本序列类型(Basic Sequences)” 序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主 ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- 详解Java 8中Stream类型的“懒”加载
在进入正题之前,我们需要先引入Java 8中Stream类型的两个很重要的操作: 中间和终结操作(Intermediate and Terminal Operation) Stream类型有两种类型的 ...
- 深入理解javascript中的动态集合——NodeList、HTMLCollection和NamedNodeMap
× 目录 [1]NodeList [2]HTMLCollection [3]NamedNodeMap[4]注意事项 前面的话 一说起动态集合,多数人可能都有所了解.但是,如果再深入些,有哪些动态集合, ...
- 攻城狮在路上(壹) Hibernate(十)--- 映射值类型集合
一.映射Set(集):未排序,无重复. 实例代码: <set name="images" table="IMAGES" lazy="true&q ...
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Javascript学习1 - Javascript中的类型对象
原文:Javascript学习1 - Javascript中的类型对象 1.1关于Numbers对象. 常用的方法:number.toString() 不用具体介绍,把数字转换为字符串,相应的还有一个 ...
- Java中泛型 类型擦除
转自:Java中泛型是类型擦除的 Java 泛型(Generic)的引入加强了参数类型的安全性,减少了类型的转换,但有一点需要注意:Java 的泛型在编译器有效,在运行期被删除,也就是说所有泛型参数类 ...
随机推荐
- 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
为什么会突然想到写这么一个大杂烩的博文呢,必须要从笔者几年前的一次面试说起 当时的我年轻气盛,在简历上放了自己的博客地址,而面试官应该是翻了我的博客,好几道面试题都是围绕着我的博文来提问 其中一个问题 ...
- kettle从入门到精通 第六十五课 ETL之kettle 执行动态SQL语句,轻松实现全量&增量数据同步
本次课程的逻辑是同步t1表数据到t2表,t1和t2表的表机构相同,都有id,name,createtime三个字段. CREATE TABLE `t1` ( `id` bigint NOT NULL ...
- CF364E
problem 算法1 我会暴力!!! 直接枚举右上角和左下角,然后计算答案,使用前缀和优化后时间复杂度为 \(O(n^4)\). 算法2 我会分治!!!. 我们知道答案就是左边+右边+两边都有的个数 ...
- docker-20.10.24搭建ferry工单系统
安装文档 https://www.fdevops.com/docs/ferry-tutorial-document/introduction 必须要有docker环境,19.03以上的 本文档需用户自 ...
- CompatTelRunner CPU 占用 22% win10 笔记本常常无故风扇狂转
CompatTelRunner CPU 占用 22% win10 笔记本常常无故风扇狂转 CompatTelRunner.exe is also known as Windows Compatibil ...
- 写了一个 SRE 调试工具,类似一个小木马
远程操作机器有时会比较麻烦,我写了一个工具,主要功能:1.远程执行命令 2.上传下载文件.是一个 Web Server,通过 HTTP 请求来操作机器,类似一个小木马.当然,因为是一个 Web Ser ...
- 记一次 .NET某游戏币自助机后端 内存暴涨分析
一:背景 1. 讲故事 前些天有位朋友找到我,说他们的程序内存会偶发性暴涨,自己分析了下是非托管内存问题,让我帮忙看下怎么回事?哈哈,看到这个dump我还是非常有兴趣的,居然还有这种游戏币自助机类型的 ...
- FeignClient接口格式
FeignClient接口格式报错信息:{"timestamp":1648015711758,"status":404,"error":&q ...
- java redis api及test demo
1.CacheService.java package com.redis.demo; import com.alibaba.fastjson.JSON; import com.alibaba.fas ...
- 格式化显示JSON数据
测试JSON {"took":1,"timed_out":false,"_shards":{"total":1,&quo ...