概述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 的泛型在编译器有效,在运行期被删除,也就是说所有泛型参数类 ...
随机推荐
- java中判断String类型为空和null的方法
1.判断一个String类型的变量是否为空(即长度为0)或者为null 在Java中,判断一个String类型的变量是否为空(即长度为0)或者为null,通常需要使用两个条件语句来进行检查.这是因为n ...
- 一个问题:六位八段数码管(Verilog)
[基本信息] 需求:verilog程序,显示任意六位字符或数值,包含点号,且能够按需点亮位数.(学习篇) 芯片型号:cyclone Ⅳ EP4CE10F17C8 数码管属性:六位.八段 [最终成果图] ...
- C# 机器学习
前言: 提起人工智能,机器学习.大家都是一脸懵的样子.其实呢,就是根据数据进行训练.然后可以大概的预测结果.Visual Studio2019 Preview中提供了图形界面的ML.Net,所以,只要 ...
- abc356
D1.5h没做出,E0.5h做出来啦? E 有两个做法,第一个是枚举分子来计算分母对答案的贡献,另一种是枚举分母来求分子对答案的贡献. 枚举分子来计算分母对答案的贡献需要用到数论分块,所以我们讲枚举分 ...
- .net core .net6 webapi 连接mysql 8
1.表结构: CREATE TABLE `table2` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `myname` varchar(255) NOT NULL, ...
- C#.NET 操作FTP
工具类: using System; using System.Collections.Generic; using System.IO; using System.Net; namespace Co ...
- MyBatis 的好处是什么?
a.MyBatis 把 sql 语句从 Java 源程序中独立出来,放在单独的 XML 文件中编写,给程序的维护带来了很大便利. b.MyBatis 封装了底层 JDBC API 的调用细节,并能自动 ...
- 增补博客 第八篇 python 中国大学排名数据分析与可视化
[题目描述]以软科中国最好大学排名为分析对象,基于requests库和bs4库编写爬虫程序,对2015年至2019年间的中国大学排名数据进行爬取:(1)按照排名先后顺序输出不同年份的前10位大学信息, ...
- jenkins发布服务失败查看catalina.out启动日志和xxl-job jobhandler naming conflicts
jenkins发布服务失败查看catalina.out启动日志和xxl-job jobhandler naming conflicts 1.查看tomcat/logs/catalina.out 日志, ...
- Luban小试牛刀
Luban小试牛刀 LubanUnity LubanUnity配置工具配置解决方案 简介 Github 文档 视频教程 Unity工具 个人感觉挺强大,便捷的,适合中大型游戏项目的配置工作.小 ...